Skip to content
This repository was archived by the owner on Jul 27, 2022. It is now read-only.

Commit 39b1471

Browse files
authored
Merge pull request #697 from wellyshen/fix/reset-not-working
Fix: `reset` method not working
2 parents 39b6707 + 87eb83e commit 39b1471

File tree

4 files changed

+26
-9
lines changed

4 files changed

+26
-9
lines changed

.changeset/gold-melons-build.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"react-cool-form": patch
3+
---
4+
5+
fix: `reset` method not working

src/useForm.test.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2084,14 +2084,18 @@ describe("useForm", () => {
20842084
const value = "🍎";
20852085
fireEvent.input(screen.getByTestId("foo"), { target: { value } });
20862086
await waitFor(() => {
2087-
expect(onStateChange).toHaveBeenCalledTimes(2);
2087+
expect(onStateChange).toHaveBeenCalledTimes(3);
20882088
expect(onStateChange).toHaveBeenNthCalledWith(1, {
20892089
...initialState,
2090-
values: { foo: value },
2090+
values: { foo: "" },
20912091
});
20922092
expect(onStateChange).toHaveBeenNthCalledWith(2, {
20932093
...initialState,
20942094
values: { foo: value },
2095+
});
2096+
expect(onStateChange).toHaveBeenNthCalledWith(3, {
2097+
...initialState,
2098+
values: { foo: value },
20952099
dirty: { foo: true },
20962100
isDirty: true,
20972101
});

src/useForm.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export default <V extends FormValues = FormValues>({
113113
submitCount: 0,
114114
});
115115
const { stateRef, setStateRef, observersRef } = useState<V>(
116-
initialStateRef.current,
116+
{ ...initialStateRef.current },
117117
onStateChange
118118
);
119119

src/useFormState.test.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ interface Props extends FormStateConfig {
1212
children: (props: any) => JSX.Element;
1313
path?: Path;
1414
formDefaultValues?: any;
15-
isError?: boolean;
15+
errorVal?: string;
16+
resetVal?: string;
1617
isTouched?: boolean;
1718
callback?: FormStateCallback;
1819
onRender?: () => void;
@@ -23,13 +24,14 @@ const Form = ({
2324
formId,
2425
path,
2526
formDefaultValues = defaultValues,
26-
isError,
27+
errorVal,
28+
resetVal,
2729
isTouched,
2830
callback,
2931
onRender = () => null,
3032
...rest
3133
}: Props) => {
32-
const { form, setError, setTouched } = useForm({
34+
const { form, setError, setTouched, reset } = useForm({
3335
id: formId,
3436
defaultValues: formDefaultValues,
3537
});
@@ -39,9 +41,10 @@ const Form = ({
3941
onRender();
4042

4143
useEffect(() => {
42-
if (isError) setError("foo", error);
44+
if (errorVal) setError("foo", errorVal);
45+
if (resetVal) reset({ foo: resetVal });
4346
if (isTouched) setTouched("foo");
44-
}, [isError, isTouched, setError, setTouched]);
47+
}, [errorVal, isTouched, reset, resetVal, setError, setTouched]);
4548

4649
return <form ref={form}>{children(props)}</form>;
4750
};
@@ -119,6 +122,11 @@ describe("useFormState", () => {
119122
);
120123
});
121124

125+
it("should get reset value correctly", () => {
126+
const resetVal = "🍎";
127+
expect(renderHelper({ path: "values.foo", resetVal })).toBe(resetVal);
128+
});
129+
122130
it("should get state with correct format", () => {
123131
expect(renderHelper({ path: "values" })).toEqual(defaultValues);
124132
expect(renderHelper({ path: "values.foo" })).toBe(defaultValues.foo);
@@ -151,7 +159,7 @@ describe("useFormState", () => {
151159
});
152160

153161
it("should get error with touched", () => {
154-
const args = { path: "errors.foo", isError: true };
162+
const args = { path: "errors.foo", errorVal: error };
155163

156164
expect(renderHelper(args)).not.toBeUndefined();
157165

0 commit comments

Comments
 (0)