Skip to content

Commit

Permalink
Merge pull request #1585 from GuidoZam/patch-number-min-max
Browse files Browse the repository at this point in the history
DynamicForm Number min max
  • Loading branch information
joaojmendes authored Jul 14, 2023
2 parents 69adc31 + 728ea88 commit 8998b5d
Show file tree
Hide file tree
Showing 34 changed files with 194 additions and 106 deletions.
19 changes: 12 additions & 7 deletions src/controls/dynamicForm/DynamicForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -208,10 +208,8 @@ export class DynamicForm extends React.Component<
shouldBeReturnBack = true;
}
} else if (val.fieldType === "Number") {
if (!val.showAsPercentage) {
if ((val.newValue < val.minimumValue) || (val.newValue > val.maximumValue)) {
shouldBeReturnBack = true;
}
if ((val.newValue < val.minimumValue) || (val.newValue > val.maximumValue)) {
shouldBeReturnBack = true;
}
}
});
Expand Down Expand Up @@ -527,6 +525,9 @@ export class DynamicForm extends React.Component<
let richText = false;
let dateFormat: DateFormat | undefined;
let principalType = "";
let minValue: number | undefined;
let maxValue: number | undefined;
let showAsPercentage: boolean | undefined;
if (item !== null) {
defaultValue = item[field.EntityPropertyName];
} else {
Expand All @@ -538,6 +539,10 @@ export class DynamicForm extends React.Component<
});
} else if (fieldType === "Note") {
richText = field.RichText;
} else if (fieldType === "Number") {
minValue = field.MinimumValue;
maxValue = field.MaximumValue;
showAsPercentage = field.ShowAsPercentage;
} else if (fieldType === "Lookup") {
lookupListId = field.LookupList;
lookupField = field.LookupField;
Expand Down Expand Up @@ -715,9 +720,9 @@ export class DynamicForm extends React.Component<
listItemId: listItemId,
principalType: principalType,
description: field.Description,
maximumValue: field.MaximumValue,
minimumValue: field.MinimumValue,
showAsPercentage: field.ShowAsPercentage
minimumValue: minValue,
maximumValue: maxValue,
showAsPercentage: showAsPercentage,
});
tempFields.sort((a, b) => a.Order - b.Order);
}
Expand Down
41 changes: 31 additions & 10 deletions src/controls/dynamicForm/dynamicField/DynamicField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi

const labelEl = <label className={(required) ? styles.fieldRequired + ' ' + styles.fieldLabel : styles.fieldLabel}>{labelText}</label>;
const errorText = this.getRequiredErrorText();
const errorTextforNumber = this.getNumberErrorText();
const errorTextEl = <text className={styles.errormessage}>{errorText}</text>;
const descriptionEl = <text className={styles.fieldDescription}>{description}</text>;
const hasImage = !!changedValue;
Expand Down Expand Up @@ -213,6 +212,7 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
</div>;

case 'Lookup':
//eslint-disable-next-line no-case-declarations
const lookupValue = this.props.newValue ? this.props.newValue : defaultValue;
return <div>
<div className={styles.titleContainer}>
Expand All @@ -236,6 +236,7 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
</div>;

case 'LookupMulti':
//eslint-disable-next-line no-case-declarations
const lookupMultiValue = this.props.newValue ? this.props.newValue : defaultValue;
return <div>
<div className={styles.titleContainer}>
Expand All @@ -259,6 +260,9 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
</div>;

case 'Number':
//eslint-disable-next-line no-case-declarations
const customNumberErrorMessage = this.getNumberErrorText();

return <div>
<div className={styles.titleContainer}>
<Icon className={styles.fieldIcon} iconName={"NumberField"} />
Expand All @@ -272,7 +276,7 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
onChange={(e, newText) => { this.onChange(newText); }}
disabled={disabled}
onBlur={this.onBlur}
errorMessage={errorTextforNumber} />
errorMessage={customNumberErrorMessage} />
{descriptionEl}
</div>;

Expand Down Expand Up @@ -601,17 +605,34 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
showAsPercentage
} = this.props;

let errorText: string | null = null;
if ((changedValue === undefined || changedValue === '' || changedValue === null || this.isEmptyArray(changedValue)) && this.props.required) {
return strings.DynamicFormRequiredErrorMessage;
}

let minValue = minimumValue !== undefined && minimumValue !== -(Number.MAX_VALUE) ? minimumValue : undefined;
let maxValue = maximumValue !== undefined && maximumValue !== Number.MAX_VALUE ? maximumValue : undefined;

errorText = this.getRequiredErrorText();
if (!errorText && (changedValue < minimumValue) || (changedValue > maximumValue)) {
if (!showAsPercentage) {
errorText = strings.DynamicFormNumberErrorMessage
.replace('{0}', minimumValue.toString())
.replace('{1}', maximumValue.toString());
if (showAsPercentage === true) {
// In case of percentage we need to convert the min and max values to a percentage value
minValue = minValue !== undefined ? minValue * 100 : undefined;
maxValue = maxValue !== undefined ? maxValue * 100 : undefined;
}

if (changedValue !== undefined && changedValue !== null && changedValue.length > 0) {
if (minValue !== undefined && maxValue !== undefined && (changedValue < minValue || changedValue > maxValue)) {
return strings.DynamicFormNumberValueMustBeBetween.replace('{0}', minValue.toString()).replace('{1}', maxValue.toString());
}
else {
if (minValue !== undefined && changedValue < minValue) {
return strings.DynamicFormNumberValueMustBeGreaterThan.replace('{0}', minValue.toString());
}
else if (maxValue !== undefined && changedValue > maxValue) {
return strings.DynamicFormNumberValueMustBeLowerThan.replace('{0}', maxValue.toString());
}
}
}
return errorText;

return null;
}

private isEmptyArray(value): boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface IDynamicFieldProps {
dateFormat?: DateFormat;
firstDayOfWeek: number;
additionalData?: FieldChangeAdditionalData;
principalType?:string;
principalType?: string;
description?: string;
maximumValue?: number;
minimumValue?: number;
Expand Down
8 changes: 5 additions & 3 deletions src/loc/bg-bg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Изберете Термин",
"DynamicFormEnterURLPlaceholder": "Въведете URL адрес",
"DynamicFormEnterDescriptionPlaceholder": "Алтернативен текст",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Грешка при валидиране",
"DynamicFormDialogValidationErrorMessage": "Има грешки при проверката, моля, поправете ги, преди да запазите.",
"DynamicFormNumberValueMustBeGreaterThan": "Стойността трябва да е по-голяма от {0}",
"DynamicFormNumberValueMustBeBetween": "Стойността трябва да е между {0} и {1}",
"DynamicFormNumberValueMustBeLowerThan": "Стойността трябва да е по-ниска от {0}",
"customDisplayName": "Използвайте това местоположение:",
"ListItemCommentDIalogDeleteSubText": "Наистина ли искате да изтриете този коментар?",
"ListItemCommentsDialogDeleteTitle": "Потвърдете Изтриване на коментар",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/ca-es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Selecciona el terme",
"DynamicFormEnterURLPlaceholder": "Introduïu una adreça URL",
"DynamicFormEnterDescriptionPlaceholder": "Text alternatiu",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Error de validació",
"DynamicFormDialogValidationErrorMessage": "Hi ha errors de validació, si us plau, corregiu-los abans de desar.",
"DynamicFormNumberValueMustBeGreaterThan": "El valor ha de ser superior a {0}",
"DynamicFormNumberValueMustBeBetween": "El valor ha d'estar entre {0} i {1}",
"DynamicFormNumberValueMustBeLowerThan": "El valor ha de ser inferior a {0}",
"customDisplayName": "Utilitzeu aquesta ubicació:",
"ListItemCommentDIalogDeleteSubText": "Esteu segur que voleu suprimir aquest comentari?",
"ListItemCommentsDialogDeleteTitle": "Confirmació de la supressió del comentari",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/da-dk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Vælg ord",
"DynamicFormEnterURLPlaceholder": "Angiv en URL-adresse",
"DynamicFormEnterDescriptionPlaceholder": "Alternativ tekst",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "Værdien af ​​dette felt skal være mellem {0} og {1}.",
"DynamicFormDialogValidationErrorTitle": "Valideringsfejl",
"DynamicFormDialogValidationErrorMessage": "Der er valideringsfejl. Ret dem venligst før du gemmer.",
"DynamicFormNumberValueMustBeGreaterThan": "Værdien skal være større end {0}",
"DynamicFormNumberValueMustBeBetween": "Værdien skal være mellem {0} og {1}",
"DynamicFormNumberValueMustBeLowerThan": "Værdien skal være lavere end {0}",
"customDisplayName": "Brug denne placering:",
"ListItemCommentDIalogDeleteSubText": "Er du sikker på, at du vil slette denne kommentar?",
"ListItemCommentsDialogDeleteTitle": "Bekræft kommentar til sletning",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/de-de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Knoten auswählen",
"DynamicFormEnterURLPlaceholder": "Geben Sie eine URL ein",
"DynamicFormEnterDescriptionPlaceholder": "Alternativtext",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "Der Wert dieses Feldes muss zwischen {0} und {1} liegen.",
"DynamicFormDialogValidationErrorTitle": "Validierungsfehler",
"DynamicFormDialogValidationErrorMessage": "Es liegen Validierungsfehler vor. Bitte beheben Sie diese vor dem Speichern.",
"DynamicFormNumberValueMustBeGreaterThan": "Der Wert muss größer als {0} sein.",
"DynamicFormNumberValueMustBeBetween": "Der Wert muss zwischen {0} und {1} liegen.",
"DynamicFormNumberValueMustBeLowerThan": "Der Wert muss niedriger als {0} sein.",
"customDisplayName": "Verwenden Sie diesen Speicherort:",
"ListItemCommentDIalogDeleteSubText": "Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?",
"ListItemCommentsDialogDeleteTitle": "Kommentar löschen bestätigen",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/el-gr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Επιλογή όρου",
"DynamicFormEnterURLPlaceholder": "Εισαγωγή διεύθυνσης URL",
"DynamicFormEnterDescriptionPlaceholder": "Εναλλακτικό κείμενο",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "Η τιμή αυτού του πεδίου πρέπει να είναι μεταξύ {0} και {1}.",
"DynamicFormDialogValidationErrorTitle": "Σφάλμα επικύρωσης",
"DynamicFormDialogValidationErrorMessage": "Υπάρχουν σφάλματα επικύρωσης, διορθώστε τα πριν την αποθήκευση.",
"DynamicFormNumberValueMustBeGreaterThan": "Η τιμή πρέπει να είναι μεγαλύτερη από {0}",
"DynamicFormNumberValueMustBeBetween": "Η τιμή πρέπει να είναι μεταξύ {0} και {1}",
"DynamicFormNumberValueMustBeLowerThan": "Η τιμή πρέπει να είναι μικρότερη από {0}",
"customDisplayName": "Χρησιμοποιήστε αυτήν τη θέση:",
"ListItemCommentDIalogDeleteSubText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το σχόλιο;",
"ListItemCommentsDialogDeleteTitle": "Επιβεβαίωση διαγραφής σχολίου",
Expand Down
4 changes: 3 additions & 1 deletion src/loc/en-us.ts
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,9 @@ define([], () => {
DynamicFormEnterDescriptionPlaceholder: "Alternative text",
DynamicFormDialogValidationErrorTitle: "Validation Error",
DynamicFormDialogValidationErrorMessage: "There are validation errors, please fix them before saving.",
DynamicFormNumberErrorMessage: "The value of this field must be between {0} and {1}.",
DynamicFormNumberValueMustBeGreaterThan: "Value must be greater than {0}",
DynamicFormNumberValueMustBeBetween: "Value must be between {0} and {1}",
DynamicFormNumberValueMustBeLowerThan: "Value must be lower than {0}",
customDisplayName: "Use this location:",
ListItemCommentDIalogDeleteSubText: "Are you sure that you want to delete this comment?",
ListItemCommentsDialogDeleteTitle: "Confirm Delete Comment",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/es-es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Seleccionar término",
"DynamicFormEnterURLPlaceholder": "Introducir una dirección URL",
"DynamicFormEnterDescriptionPlaceholder": "Texto alternativo",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Error de validacion",
"DynamicFormDialogValidationErrorMessage": "Hay errores de validación, corríjalos antes de guardar.",
"DynamicFormNumberValueMustBeGreaterThan": "El valor debe ser mayor que {0}",
"DynamicFormNumberValueMustBeBetween": "El valor debe estar entre {0} y {1}",
"DynamicFormNumberValueMustBeLowerThan": "El valor debe ser inferior a {0}",
"customDisplayName": "Utilice esta ubicación:",
"ListItemCommentDIalogDeleteSubText": "¿Está seguro de que desea eliminar este comentario?",
"ListItemCommentsDialogDeleteTitle": "Confirmar comentario de eliminación",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/et-ee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Vali termin",
"DynamicFormEnterURLPlaceholder": "Sisestage URL",
"DynamicFormEnterDescriptionPlaceholder": "Asetekst",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Valideerimisviga",
"DynamicFormDialogValidationErrorMessage": "Valideerimisel on vigu, parandage need enne salvestamist.",
"DynamicFormNumberValueMustBeGreaterThan": "Väärtus peab olema suurem kui {0}",
"DynamicFormNumberValueMustBeBetween": "Väärtus peab olema vahemikus {0} kuni {1}",
"DynamicFormNumberValueMustBeLowerThan": "Väärtus peab olema väiksem kui {0}",
"customDisplayName": "Kasuta seda asukohta:",
"ListItemCommentDIalogDeleteSubText": "Kas soovite kindlasti selle kommentaari kustutada?",
"ListItemCommentsDialogDeleteTitle": "Kommentaari kustutamise kinnitamine",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/eu-es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -380,8 +380,10 @@ TermSetNavigationNoTerms: "No terms defined",
"DynamicFormTermPanelTitle": "Select Term",
"DynamicFormEnterURLPlaceholder": "Enter a URL",
"DynamicFormEnterDescriptionPlaceholder": "Alternative text",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Balioztatze-errorea",
"DynamicFormDialogValidationErrorMessage": "Balidazio-erroreak daude, konpondu aurretik, mesedez.",
"DynamicFormNumberValueMustBeGreaterThan": "Balioak {0} baino handiagoa izan behar du",
"DynamicFormNumberValueMustBeBetween": "Balioak {0} eta {1} artean egon behar du",
"DynamicFormNumberValueMustBeLowerThan": "Balioak {0} baino txikiagoa izan behar du",
};
});
8 changes: 5 additions & 3 deletions src/loc/fi-fi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Valitse termi",
"DynamicFormEnterURLPlaceholder": "URL-osoitteen syöttäminen",
"DynamicFormEnterDescriptionPlaceholder": "Vaihtoehtoinen teksti",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "Tämän kentän arvon on oltava välillä {0} - {1}.",
"DynamicFormDialogValidationErrorTitle": "Vahvistusvirhe",
"DynamicFormDialogValidationErrorMessage": "Vahvistusvirheitä on, korjaa ne ennen tallentamista.",
"DynamicFormNumberValueMustBeGreaterThan": "Arvon on oltava suurempi kuin {0}",
"DynamicFormNumberValueMustBeBetween": "Tämän kentän arvon on oltava välillä {0} - {1}",
"DynamicFormNumberValueMustBeLowerThan": "Arvon on oltava pienempi kuin {0}",
"customDisplayName": "Käytä tätä sijaintia:",
"ListItemCommentDIalogDeleteSubText": "Haluatko varmasti poistaa tämän kommentin?",
"ListItemCommentsDialogDeleteTitle": "Vahvista poista kommentti",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/fr-ca.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Sélectionnez terme",
"DynamicFormEnterURLPlaceholder": "Entrez une URL",
"DynamicFormEnterDescriptionPlaceholder": "Texte alternatif",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Erreur de validation",
"DynamicFormDialogValidationErrorMessage": "Il y a des erreurs de validation, veuillez les corriger avant d'enregistrer.",
"DynamicFormNumberValueMustBeGreaterThan": "La valeur doit être supérieure à {0}",
"DynamicFormNumberValueMustBeBetween": "La valeur doit être comprise entre {0} et {1}",
"DynamicFormNumberValueMustBeLowerThan": "La valeur doit être inférieure à {0}",
"customDisplayName": "Utilisez cet emplacement :",
"ListItemCommentDIalogDeleteSubText": "Êtes-vous sûr de vouloir supprimer ce commentaire?",
"ListItemCommentsDialogDeleteTitle": "Confirmer supprimer le commentaire",
Expand Down
8 changes: 5 additions & 3 deletions src/loc/fr-fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,11 @@ define([], () => {
"DynamicFormTermPanelTitle": "Sélectionner un terme",
"DynamicFormEnterURLPlaceholder": "Entrez une URL",
"DynamicFormEnterDescriptionPlaceholder": "Texte alternatif",
"DynamicFormDialogValidationErrorTitle": "Validation Error",
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
"DynamicFormDialogValidationErrorTitle": "Erreur de validation",
"DynamicFormDialogValidationErrorMessage": "Il y a des erreurs de validation, veuillez les corriger avant d'enregistrer.",
"DynamicFormNumberValueMustBeGreaterThan": "La valeur doit être supérieure à {0}",
"DynamicFormNumberValueMustBeBetween": "La valeur doit être comprise entre {0} et {1}",
"DynamicFormNumberValueMustBeLowerThan": "La valeur doit être inférieure à {0}",
"customDisplayName": "Utilisez cet emplacement :",
"ListItemCommentDIalogDeleteSubText": "Êtes-vous sûr de vouloir supprimer ce commentaire ?",
"ListItemCommentsDialogDeleteTitle": "Confirmer la suppression du commentaire",
Expand Down
Loading

0 comments on commit 8998b5d

Please sign in to comment.