Skip to content

Commit 8998b5d

Browse files
authored
Merge pull request #1585 from GuidoZam/patch-number-min-max
DynamicForm Number min max
2 parents 69adc31 + 728ea88 commit 8998b5d

34 files changed

+194
-106
lines changed

src/controls/dynamicForm/DynamicForm.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,8 @@ export class DynamicForm extends React.Component<
208208
shouldBeReturnBack = true;
209209
}
210210
} else if (val.fieldType === "Number") {
211-
if (!val.showAsPercentage) {
212-
if ((val.newValue < val.minimumValue) || (val.newValue > val.maximumValue)) {
213-
shouldBeReturnBack = true;
214-
}
211+
if ((val.newValue < val.minimumValue) || (val.newValue > val.maximumValue)) {
212+
shouldBeReturnBack = true;
215213
}
216214
}
217215
});
@@ -527,6 +525,9 @@ export class DynamicForm extends React.Component<
527525
let richText = false;
528526
let dateFormat: DateFormat | undefined;
529527
let principalType = "";
528+
let minValue: number | undefined;
529+
let maxValue: number | undefined;
530+
let showAsPercentage: boolean | undefined;
530531
if (item !== null) {
531532
defaultValue = item[field.EntityPropertyName];
532533
} else {
@@ -538,6 +539,10 @@ export class DynamicForm extends React.Component<
538539
});
539540
} else if (fieldType === "Note") {
540541
richText = field.RichText;
542+
} else if (fieldType === "Number") {
543+
minValue = field.MinimumValue;
544+
maxValue = field.MaximumValue;
545+
showAsPercentage = field.ShowAsPercentage;
541546
} else if (fieldType === "Lookup") {
542547
lookupListId = field.LookupList;
543548
lookupField = field.LookupField;
@@ -715,9 +720,9 @@ export class DynamicForm extends React.Component<
715720
listItemId: listItemId,
716721
principalType: principalType,
717722
description: field.Description,
718-
maximumValue: field.MaximumValue,
719-
minimumValue: field.MinimumValue,
720-
showAsPercentage: field.ShowAsPercentage
723+
minimumValue: minValue,
724+
maximumValue: maxValue,
725+
showAsPercentage: showAsPercentage,
721726
});
722727
tempFields.sort((a, b) => a.Order - b.Order);
723728
}

src/controls/dynamicForm/dynamicField/DynamicField.tsx

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
9595

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

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

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

261262
case 'Number':
263+
//eslint-disable-next-line no-case-declarations
264+
const customNumberErrorMessage = this.getNumberErrorText();
265+
262266
return <div>
263267
<div className={styles.titleContainer}>
264268
<Icon className={styles.fieldIcon} iconName={"NumberField"} />
@@ -272,7 +276,7 @@ export class DynamicField extends React.Component<IDynamicFieldProps, IDynamicFi
272276
onChange={(e, newText) => { this.onChange(newText); }}
273277
disabled={disabled}
274278
onBlur={this.onBlur}
275-
errorMessage={errorTextforNumber} />
279+
errorMessage={customNumberErrorMessage} />
276280
{descriptionEl}
277281
</div>;
278282

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

604-
let errorText: string | null = null;
608+
if ((changedValue === undefined || changedValue === '' || changedValue === null || this.isEmptyArray(changedValue)) && this.props.required) {
609+
return strings.DynamicFormRequiredErrorMessage;
610+
}
611+
612+
let minValue = minimumValue !== undefined && minimumValue !== -(Number.MAX_VALUE) ? minimumValue : undefined;
613+
let maxValue = maximumValue !== undefined && maximumValue !== Number.MAX_VALUE ? maximumValue : undefined;
605614

606-
errorText = this.getRequiredErrorText();
607-
if (!errorText && (changedValue < minimumValue) || (changedValue > maximumValue)) {
608-
if (!showAsPercentage) {
609-
errorText = strings.DynamicFormNumberErrorMessage
610-
.replace('{0}', minimumValue.toString())
611-
.replace('{1}', maximumValue.toString());
615+
if (showAsPercentage === true) {
616+
// In case of percentage we need to convert the min and max values to a percentage value
617+
minValue = minValue !== undefined ? minValue * 100 : undefined;
618+
maxValue = maxValue !== undefined ? maxValue * 100 : undefined;
619+
}
620+
621+
if (changedValue !== undefined && changedValue !== null && changedValue.length > 0) {
622+
if (minValue !== undefined && maxValue !== undefined && (changedValue < minValue || changedValue > maxValue)) {
623+
return strings.DynamicFormNumberValueMustBeBetween.replace('{0}', minValue.toString()).replace('{1}', maxValue.toString());
624+
}
625+
else {
626+
if (minValue !== undefined && changedValue < minValue) {
627+
return strings.DynamicFormNumberValueMustBeGreaterThan.replace('{0}', minValue.toString());
628+
}
629+
else if (maxValue !== undefined && changedValue > maxValue) {
630+
return strings.DynamicFormNumberValueMustBeLowerThan.replace('{0}', maxValue.toString());
631+
}
612632
}
613633
}
614-
return errorText;
634+
635+
return null;
615636
}
616637

617638
private isEmptyArray(value): boolean {

src/controls/dynamicForm/dynamicField/IDynamicFieldProps.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export interface IDynamicFieldProps {
3232
dateFormat?: DateFormat;
3333
firstDayOfWeek: number;
3434
additionalData?: FieldChangeAdditionalData;
35-
principalType?:string;
35+
principalType?: string;
3636
description?: string;
3737
maximumValue?: number;
3838
minimumValue?: number;

src/loc/bg-bg.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Изберете Термин",
365365
"DynamicFormEnterURLPlaceholder": "Въведете URL адрес",
366366
"DynamicFormEnterDescriptionPlaceholder": "Алтернативен текст",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
367+
"DynamicFormDialogValidationErrorTitle": "Грешка при валидиране",
368+
"DynamicFormDialogValidationErrorMessage": "Има грешки при проверката, моля, поправете ги, преди да запазите.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "Стойността трябва да е по-голяма от {0}",
370+
"DynamicFormNumberValueMustBeBetween": "Стойността трябва да е между {0} и {1}",
371+
"DynamicFormNumberValueMustBeLowerThan": "Стойността трябва да е по-ниска от {0}",
370372
"customDisplayName": "Използвайте това местоположение:",
371373
"ListItemCommentDIalogDeleteSubText": "Наистина ли искате да изтриете този коментар?",
372374
"ListItemCommentsDialogDeleteTitle": "Потвърдете Изтриване на коментар",

src/loc/ca-es.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Selecciona el terme",
365365
"DynamicFormEnterURLPlaceholder": "Introduïu una adreça URL",
366366
"DynamicFormEnterDescriptionPlaceholder": "Text alternatiu",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
367+
"DynamicFormDialogValidationErrorTitle": "Error de validació",
368+
"DynamicFormDialogValidationErrorMessage": "Hi ha errors de validació, si us plau, corregiu-los abans de desar.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "El valor ha de ser superior a {0}",
370+
"DynamicFormNumberValueMustBeBetween": "El valor ha d'estar entre {0} i {1}",
371+
"DynamicFormNumberValueMustBeLowerThan": "El valor ha de ser inferior a {0}",
370372
"customDisplayName": "Utilitzeu aquesta ubicació:",
371373
"ListItemCommentDIalogDeleteSubText": "Esteu segur que voleu suprimir aquest comentari?",
372374
"ListItemCommentsDialogDeleteTitle": "Confirmació de la supressió del comentari",

src/loc/da-dk.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Vælg ord",
365365
"DynamicFormEnterURLPlaceholder": "Angiv en URL-adresse",
366366
"DynamicFormEnterDescriptionPlaceholder": "Alternativ tekst",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "Værdien af ​​dette felt skal være mellem {0} og {1}.",
367+
"DynamicFormDialogValidationErrorTitle": "Valideringsfejl",
368+
"DynamicFormDialogValidationErrorMessage": "Der er valideringsfejl. Ret dem venligst før du gemmer.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "Værdien skal være større end {0}",
370+
"DynamicFormNumberValueMustBeBetween": "Værdien skal være mellem {0} og {1}",
371+
"DynamicFormNumberValueMustBeLowerThan": "Værdien skal være lavere end {0}",
370372
"customDisplayName": "Brug denne placering:",
371373
"ListItemCommentDIalogDeleteSubText": "Er du sikker på, at du vil slette denne kommentar?",
372374
"ListItemCommentsDialogDeleteTitle": "Bekræft kommentar til sletning",

src/loc/de-de.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Knoten auswählen",
365365
"DynamicFormEnterURLPlaceholder": "Geben Sie eine URL ein",
366366
"DynamicFormEnterDescriptionPlaceholder": "Alternativtext",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "Der Wert dieses Feldes muss zwischen {0} und {1} liegen.",
367+
"DynamicFormDialogValidationErrorTitle": "Validierungsfehler",
368+
"DynamicFormDialogValidationErrorMessage": "Es liegen Validierungsfehler vor. Bitte beheben Sie diese vor dem Speichern.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "Der Wert muss größer als {0} sein.",
370+
"DynamicFormNumberValueMustBeBetween": "Der Wert muss zwischen {0} und {1} liegen.",
371+
"DynamicFormNumberValueMustBeLowerThan": "Der Wert muss niedriger als {0} sein.",
370372
"customDisplayName": "Verwenden Sie diesen Speicherort:",
371373
"ListItemCommentDIalogDeleteSubText": "Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?",
372374
"ListItemCommentsDialogDeleteTitle": "Kommentar löschen bestätigen",

src/loc/el-gr.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Επιλογή όρου",
365365
"DynamicFormEnterURLPlaceholder": "Εισαγωγή διεύθυνσης URL",
366366
"DynamicFormEnterDescriptionPlaceholder": "Εναλλακτικό κείμενο",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "Η τιμή αυτού του πεδίου πρέπει να είναι μεταξύ {0} και {1}.",
367+
"DynamicFormDialogValidationErrorTitle": "Σφάλμα επικύρωσης",
368+
"DynamicFormDialogValidationErrorMessage": "Υπάρχουν σφάλματα επικύρωσης, διορθώστε τα πριν την αποθήκευση.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "Η τιμή πρέπει να είναι μεγαλύτερη από {0}",
370+
"DynamicFormNumberValueMustBeBetween": "Η τιμή πρέπει να είναι μεταξύ {0} και {1}",
371+
"DynamicFormNumberValueMustBeLowerThan": "Η τιμή πρέπει να είναι μικρότερη από {0}",
370372
"customDisplayName": "Χρησιμοποιήστε αυτήν τη θέση:",
371373
"ListItemCommentDIalogDeleteSubText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το σχόλιο;",
372374
"ListItemCommentsDialogDeleteTitle": "Επιβεβαίωση διαγραφής σχολίου",

src/loc/en-us.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,9 @@ define([], () => {
384384
DynamicFormEnterDescriptionPlaceholder: "Alternative text",
385385
DynamicFormDialogValidationErrorTitle: "Validation Error",
386386
DynamicFormDialogValidationErrorMessage: "There are validation errors, please fix them before saving.",
387-
DynamicFormNumberErrorMessage: "The value of this field must be between {0} and {1}.",
387+
DynamicFormNumberValueMustBeGreaterThan: "Value must be greater than {0}",
388+
DynamicFormNumberValueMustBeBetween: "Value must be between {0} and {1}",
389+
DynamicFormNumberValueMustBeLowerThan: "Value must be lower than {0}",
388390
customDisplayName: "Use this location:",
389391
ListItemCommentDIalogDeleteSubText: "Are you sure that you want to delete this comment?",
390392
ListItemCommentsDialogDeleteTitle: "Confirm Delete Comment",

src/loc/es-es.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,11 @@ define([], () => {
364364
"DynamicFormTermPanelTitle": "Seleccionar término",
365365
"DynamicFormEnterURLPlaceholder": "Introducir una dirección URL",
366366
"DynamicFormEnterDescriptionPlaceholder": "Texto alternativo",
367-
"DynamicFormDialogValidationErrorTitle": "Validation Error",
368-
"DynamicFormDialogValidationErrorMessage": "There are validation errors, please fix them before saving.",
369-
"DynamicFormNumberErrorMessage": "The value of this field must be between {0} and {1}.",
367+
"DynamicFormDialogValidationErrorTitle": "Error de validacion",
368+
"DynamicFormDialogValidationErrorMessage": "Hay errores de validación, corríjalos antes de guardar.",
369+
"DynamicFormNumberValueMustBeGreaterThan": "El valor debe ser mayor que {0}",
370+
"DynamicFormNumberValueMustBeBetween": "El valor debe estar entre {0} y {1}",
371+
"DynamicFormNumberValueMustBeLowerThan": "El valor debe ser inferior a {0}",
370372
"customDisplayName": "Utilice esta ubicación:",
371373
"ListItemCommentDIalogDeleteSubText": "¿Está seguro de que desea eliminar este comentario?",
372374
"ListItemCommentsDialogDeleteTitle": "Confirmar comentario de eliminación",

0 commit comments

Comments
 (0)