From 39669b8741f03327c3e37d8a75d3e723387e5548 Mon Sep 17 00:00:00 2001 From: zz1126 Date: Thu, 6 Feb 2025 22:02:52 +0800 Subject: [PATCH 1/5] Feat: Improve onReset to get the new values provided by resetForm --- packages/formik/src/Formik.tsx | 3 ++- packages/formik/src/types.tsx | 2 +- packages/formik/test/Formik.test.tsx | 34 +++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/formik/src/Formik.tsx b/packages/formik/src/Formik.tsx index ea36e80d3..24ec2ee4a 100755 --- a/packages/formik/src/Formik.tsx +++ b/packages/formik/src/Formik.tsx @@ -406,7 +406,8 @@ export function useFormik({ if (props.onReset) { const maybePromisedOnReset = (props.onReset as any)( state.values, - imperativeMethods + imperativeMethods, + values ); if (isPromise(maybePromisedOnReset)) { diff --git a/packages/formik/src/types.tsx b/packages/formik/src/types.tsx index 71db6792c..70284b79e 100644 --- a/packages/formik/src/types.tsx +++ b/packages/formik/src/types.tsx @@ -214,7 +214,7 @@ export interface FormikConfig extends FormikSharedConfig { /** * Reset handler */ - onReset?: (values: Values, formikHelpers: FormikHelpers) => void; + onReset?: (values: Values, formikHelpers: FormikHelpers, newValues?: Values) => void; /** * Submission handler diff --git a/packages/formik/test/Formik.test.tsx b/packages/formik/test/Formik.test.tsx index 864589643..f241fdebb 100644 --- a/packages/formik/test/Formik.test.tsx +++ b/packages/formik/test/Formik.test.tsx @@ -1009,7 +1009,39 @@ describe('', () => { setSubmitting: expect.any(Function), setTouched: expect.any(Function), setValues: expect.any(Function), - }) + }), + InitialValues + ); + }); + + it('should call onReset with values and actions and new initial values when form is reset with values', () => { + const onReset = jest.fn(); + const { getProps } = renderFormik({ + initialValues: InitialValues, + onSubmit: noop, + onReset, + }); + + const newInitialValues = { name: 'jared', age: 31,} + + act(() => { + getProps().resetForm({values: newInitialValues}); + }); + + expect(onReset).toHaveBeenCalledWith( + InitialValues, + expect.objectContaining({ + resetForm: expect.any(Function), + setErrors: expect.any(Function), + setFieldError: expect.any(Function), + setFieldTouched: expect.any(Function), + setFieldValue: expect.any(Function), + setStatus: expect.any(Function), + setSubmitting: expect.any(Function), + setTouched: expect.any(Function), + setValues: expect.any(Function), + }), + newInitialValues ); }); From 0760b384c3afd50d8e6e03cc8b03620030882fbc Mon Sep 17 00:00:00 2001 From: zz1126 Date: Thu, 6 Feb 2025 22:03:17 +0800 Subject: [PATCH 2/5] add a changeset --- .changeset/afraid-garlics-destroy.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/afraid-garlics-destroy.md diff --git a/.changeset/afraid-garlics-destroy.md b/.changeset/afraid-garlics-destroy.md new file mode 100644 index 000000000..153662ffe --- /dev/null +++ b/.changeset/afraid-garlics-destroy.md @@ -0,0 +1,5 @@ +--- +'formik': major +--- + +Feat: Improve onReset to get the new values provided by resetForm From c866c0d6fc67d2eef5fa1898a7ebde0b32053d1a Mon Sep 17 00:00:00 2001 From: zz1126 Date: Thu, 6 Feb 2025 22:17:19 +0800 Subject: [PATCH 3/5] improve --- docs/api/formik.md | 2 +- packages/formik/src/types.tsx | 2 +- packages/formik/test/Formik.test.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/formik.md b/docs/api/formik.md index 9fa07f3a4..f6e9bb3d4 100644 --- a/docs/api/formik.md +++ b/docs/api/formik.md @@ -380,7 +380,7 @@ an input from uncontrolled to controlled. Note: `initialValues` not available to the higher-order component, use `mapPropsToValues` instead. -### `onReset?: (values: Values, formikBag: FormikBag) => void` +### `onReset?: (values: Values, formikBag: FormikBag, initialValues: FormikBag) => void` Your optional form reset handler. It is passed your forms `values` and the "FormikBag". diff --git a/packages/formik/src/types.tsx b/packages/formik/src/types.tsx index 70284b79e..6ca58c5a0 100644 --- a/packages/formik/src/types.tsx +++ b/packages/formik/src/types.tsx @@ -214,7 +214,7 @@ export interface FormikConfig extends FormikSharedConfig { /** * Reset handler */ - onReset?: (values: Values, formikHelpers: FormikHelpers, newValues?: Values) => void; + onReset?: (values: Values, formikHelpers: FormikHelpers, initialValues?: Values) => void; /** * Submission handler diff --git a/packages/formik/test/Formik.test.tsx b/packages/formik/test/Formik.test.tsx index f241fdebb..a271dec33 100644 --- a/packages/formik/test/Formik.test.tsx +++ b/packages/formik/test/Formik.test.tsx @@ -1014,7 +1014,7 @@ describe('', () => { ); }); - it('should call onReset with values and actions and new initial values when form is reset with values', () => { + it('should call onReset with values and actions and initialValues when form is reset with values', () => { const onReset = jest.fn(); const { getProps } = renderFormik({ initialValues: InitialValues, From 74c246a08eb226f4cf2d46419c5143cd7eeb0d17 Mon Sep 17 00:00:00 2001 From: zz1126 Date: Thu, 6 Feb 2025 22:18:46 +0800 Subject: [PATCH 4/5] improve --- docs/api/formik.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/formik.md b/docs/api/formik.md index f6e9bb3d4..d9b38e58d 100644 --- a/docs/api/formik.md +++ b/docs/api/formik.md @@ -380,10 +380,10 @@ an input from uncontrolled to controlled. Note: `initialValues` not available to the higher-order component, use `mapPropsToValues` instead. -### `onReset?: (values: Values, formikBag: FormikBag, initialValues: FormikBag) => void` +### `onReset?: (values: Values, formikBag: FormikBag, initialValues: Values) => void` Your optional form reset handler. It is passed your forms `values` and the -"FormikBag". +"FormikBag" and the `initialValues`. ### `onSubmit: (values: Values, formikBag: FormikBag) => void | Promise` From 8bdc214d36623bcb2956f687fa92fd36c132d3a7 Mon Sep 17 00:00:00 2001 From: zz1126 Date: Thu, 6 Feb 2025 22:20:10 +0800 Subject: [PATCH 5/5] improve --- packages/formik/test/Formik.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/formik/test/Formik.test.tsx b/packages/formik/test/Formik.test.tsx index a271dec33..f83e301ae 100644 --- a/packages/formik/test/Formik.test.tsx +++ b/packages/formik/test/Formik.test.tsx @@ -1022,10 +1022,10 @@ describe('', () => { onReset, }); - const newInitialValues = { name: 'jared', age: 31,} + const NewInitialValues = { name: 'jared', age: 31,} act(() => { - getProps().resetForm({values: newInitialValues}); + getProps().resetForm({values: NewInitialValues}); }); expect(onReset).toHaveBeenCalledWith( @@ -1041,7 +1041,7 @@ describe('', () => { setTouched: expect.any(Function), setValues: expect.any(Function), }), - newInitialValues + NewInitialValues ); });