fix: admin/fs: regression (0.22.1) on masks validation, not working

Massimo Melina committed Jun 3, 2022 at 17:34 UTC 61801a3c9fbddab1cea80279a374a231f5c983c6
1 file changed +5 -2
mui-grid-form/src/Form.ts
+5 -2
@@ -74,6 +74,7 @@ export function Form<Values extends Dict>({ fields, values, set, defaults, save,
74 }, [])
75
76 const [errors, setErrors] = useState<Dict<ValidationError>>({})
77 + const [fieldExceptions, setFieldExceptions] = useState<Dict<ValidationError>>({})
78 const saveBtn = typeof save === 'function' ? { onClick: save } : save // normalize
79 const [phase, setPhase] = useState(Phase.Idle)
80 const submitAfterValidation = useRef(false)
@@ -104,7 +105,7 @@ export function Form<Values extends Dict>({ fields, values, set, defaults, save,
105 if (isValidElement(row))
106 return h(Grid, { key: idx, item: true, xs: 12 }, row)
107 const { k, fromField=_.identity, toField=_.identity, getError, error, ...field } = row
107 - let errMsg = errors[k]
108 + let errMsg = errors[k] || fieldExceptions[k]
109 if (errMsg === true)
110 errMsg = "Not valid"
111 if (k) {
@@ -124,12 +125,13 @@ export function Form<Values extends Dict>({ fields, values, set, defaults, save,
125 onChange(v) {
126 try {
127 v = fromField(v)
128 + setFieldExceptions(x => ({ ...x, [k]: false }))
129 if (_.isEqual(v, originalValue)) return
130 set(v, k)
131 pleaseValidate(k)
132 }
133 catch (e) {
132 - onError?.(e)
134 + setFieldExceptions(x => ({ ...x, [k]: (e as any)?.message || String(e) || true }))
135 }
136 },
137 } as Partial<FieldProps<any>>)
@@ -192,6 +194,7 @@ export function Form<Values extends Dict>({ fields, values, set, defaults, save,
194 const v = values?.[k]
195 const err = await apis[k]?.getError()
196 || await f.getError?.(v, { values, fields })
197 + || fieldExceptions[k]
198 errs[k] = err || false
199 if (k === validateUpTo.current) break
200 if (!mounted.current) return // abort