diff options
author | Sebastian <sebasjm@gmail.com> | 2023-05-10 15:01:56 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-05-10 15:01:56 -0300 |
commit | 55a1e8c6e1ab34702525aadf18b1acce2d06e616 (patch) | |
tree | df430fee9ba715fc64c342052b43c1b66a532cd7 /packages/exchange-backoffice-ui/src/forms/useField.ts | |
parent | f281803f1e555b8e8c1e76612b1f6b7128033cd6 (diff) |
fix form
Diffstat (limited to 'packages/exchange-backoffice-ui/src/forms/useField.ts')
-rw-r--r-- | packages/exchange-backoffice-ui/src/forms/useField.ts | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/packages/exchange-backoffice-ui/src/forms/useField.ts b/packages/exchange-backoffice-ui/src/forms/useField.ts index 6f7b84112..f54dc7465 100644 --- a/packages/exchange-backoffice-ui/src/forms/useField.ts +++ b/packages/exchange-backoffice-ui/src/forms/useField.ts @@ -13,14 +13,14 @@ export function useField<T>(name: keyof T): InputFieldHandler<T[keyof T]> { initialValue, value: formValue, computeFormState, - onUpdate, + onUpdate: notifyUpdate, } = useContext(FormContext); type P = typeof name; type V = T[P]; - const [isDirty, setDirty] = useState(false); - const formState = computeFormState ? computeFormState(formValue) : {}; + const formState = computeFormState ? computeFormState(formValue.current) : {}; - const fieldValue = readField(formValue, String(name)) as V; + const fieldValue = readField(formValue.current, String(name)) as V; + const [currentValue, setCurrentValue] = useState<any | undefined>(undefined); const fieldState = readField<Partial<InputFieldState>>( formState, String(name), @@ -35,16 +35,21 @@ export function useField<T>(name: keyof T): InputFieldHandler<T[keyof T]> { }; function onChange(value: V): void { - setDirty(true); - return onUpdate((prev: any) => { - return setValueDeeper(prev, String(name).split("."), value); - }); + setCurrentValue(value); + formValue.current = setValueDeeper( + formValue.current, + String(name).split("."), + value, + ); + if (notifyUpdate) { + notifyUpdate(formValue.current); + } } return { value: fieldValue, onChange, - isDirty, + isDirty: currentValue !== undefined, state, }; } |