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:
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 ||