aboutsummaryrefslogtreecommitdiff
path: root/packages/exchange-backoffice-ui/src/forms/useField.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-05-10 15:01:56 -0300
committerSebastian <sebasjm@gmail.com>2023-05-10 15:01:56 -0300
commit55a1e8c6e1ab34702525aadf18b1acce2d06e616 (patch)
treedf430fee9ba715fc64c342052b43c1b66a532cd7 /packages/exchange-backoffice-ui/src/forms/useField.ts
parentf281803f1e555b8e8c1e76612b1f6b7128033cd6 (diff)
fix form
Diffstat (limited to 'packages/exchange-backoffice-ui/src/forms/useField.ts')
-rw-r--r--packages/exchange-backoffice-ui/src/forms/useField.ts23
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,
};
}