taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 8f47779b927b08cd16c2fd6f6e672c56e1989dfe
parent 9c036fb95c298813aa004b87311ccdf584abb5ef
Author: Sebastian <sebasjm@gmail.com>
Date:   Mon, 17 Mar 2025 16:35:58 -0300

do not compute errors on hidden fields

Diffstat:
Mpackages/web-util/src/hooks/useForm.ts | 21++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/packages/web-util/src/hooks/useForm.ts b/packages/web-util/src/hooks/useForm.ts @@ -188,12 +188,24 @@ function validateRequiredFields<FormType>( ): FormErrors<FormType> | undefined { let result: FormErrors<FormType> | undefined = undefined; - function checkIfRequiredFieldHasValue(formElement: UIFormElementConfig) { + function checkIfRequiredFieldHasValue( + formElement: UIFormElementConfig, + hiddenSection: boolean | undefined, + ) { if (!("id" in formElement)) { return; } const path = formElement.id.split("."); const v = getValueFromPath(formData as any, path); + + const hidden = + hiddenSection === true || + formElement.hidden === true || + (formElement.hide && formElement.hide(v, formData) === true); + + if (hidden) { + return; + } if (formElement.required && v === undefined) { const e: ErrorAndLabel = { label: formElement.label as TranslatedString, @@ -228,12 +240,13 @@ function validateRequiredFields<FormType>( switch (formDesign.type) { case "double-column": { formDesign.sections.forEach((sec) => { - sec.fields.forEach(checkIfRequiredFieldHasValue); + const hidden = sec.hide && sec.hide(result); + sec.fields.forEach((f) => checkIfRequiredFieldHasValue(f, hidden)); }); break; } case "single-column": { - formDesign.fields.forEach(checkIfRequiredFieldHasValue); + formDesign.fields.forEach((f) => checkIfRequiredFieldHasValue(f, undefined)); break; } default: { @@ -286,6 +299,8 @@ function constructFormHandler<T>( }; handler = setValueIntoPath(handler, path, field); + + // compute prop based un state const hidden = hiddenSection === true || formElement.hidden === true ||