diff --git a/frontend/lib/util/form.test.ts b/frontend/lib/util/form.test.ts index 99288b3ed..89d6881cf 100644 --- a/frontend/lib/util/form.test.ts +++ b/frontend/lib/util/form.test.ts @@ -37,7 +37,7 @@ describe("Form", () => { // Number required [{ type: "number", required: true }, "", "FORM_VALIDATION_RESULT_REQUIRED", undefined], - // FIXME in issue #824 [{ type: "number", required: false }, "", undefined, undefined], + [{ type: "number", required: false }, "", undefined, undefined], // Number min/max [{ type: "number", min: 3 }, "2", "FORM_VALIDATION_RESULT_MIN", undefined], @@ -54,7 +54,7 @@ describe("Form", () => { // Number isFormatted required [{ type: "number", isFormatted: true, required: true }, "", "FORM_VALIDATION_RESULT_REQUIRED", undefined], - // FIXME in issue #824 [{ type: "number", isFormatted: true , required: false }, "", undefined, undefined], + [{ type: "number", isFormatted: true, required: false }, "", undefined, undefined], ])("processForm for field type %j with input %j should return %j, %j", (field, inputValue, error, value) => { type RequestObject = { field: FieldValue }; const formFields: FormFields = { field }; diff --git a/frontend/lib/util/form.ts b/frontend/lib/util/form.ts index a6235d088..c17ee0f6c 100644 --- a/frontend/lib/util/form.ts +++ b/frontend/lib/util/form.ts @@ -67,6 +67,10 @@ export function processForm( switch (field.type) { case "number": { + if (!field.required && value === "") { + value = undefined; + break; + } const parsedValue = field.isFormatted ? deformatNumber(value) : parseIntUserInput(value); //parseInt is used in deformatNumber, the result is a number or NaN. if (parsedValue === undefined || Number.isNaN(parsedValue)) { @@ -121,6 +125,8 @@ export function validateFormValue(field: AnyFormField, value: string | number | if (field.max && value > field.max) { return "FORM_VALIDATION_RESULT_MAX"; } + } else if (!field.required && value === undefined) { + return null; } else { return "FORM_VALIDATION_RESULT_INVALID_TYPE"; }