diff --git a/.github/workflows/automation.yml b/.github/workflows/automation.yml index a02f5338c4a..3b12584fd49 100644 --- a/.github/workflows/automation.yml +++ b/.github/workflows/automation.yml @@ -14,7 +14,7 @@ jobs: - name: Install pnpm uses: pnpm/action-setup@v2 with: - version: latest + version: 7 - name: Cypress run uses: cypress-io/github-action@v4 diff --git a/reports/api-extractor.md b/reports/api-extractor.md index ac6c7c89b0c..b486ac02278 100644 --- a/reports/api-extractor.md +++ b/reports/api-extractor.md @@ -49,6 +49,7 @@ export type Control; _options: UseFormProps; _getDirty: GetIsDirty; + _resetDefaultValues: Noop; _formState: FormState; _updateValid: (shouldUpdateValid?: boolean) => void; _updateFormState: (formState: Partial>) => void; diff --git a/src/logic/createFormControl.ts b/src/logic/createFormControl.ts index 465c320a2ac..762d2c861d8 100644 --- a/src/logic/createFormControl.ts +++ b/src/logic/createFormControl.ts @@ -1246,14 +1246,14 @@ export function createFormControl< }; }; - if (isFunction(_options.defaultValues)) { + const _resetDefaultValues = () => + isFunction(_options.defaultValues) && _options.defaultValues().then((values) => { reset(values, _options.resetOptions); _subjects.state.next({ isLoading: false, }); }); - } return { control: { @@ -1268,6 +1268,7 @@ export function createFormControl< _updateFieldArray, _getFieldArray, _reset, + _resetDefaultValues, _updateFormState, _subjects, _proxyFormState, diff --git a/src/types/form.ts b/src/types/form.ts index d7df05c8da0..d20ce20b664 100644 --- a/src/types/form.ts +++ b/src/types/form.ts @@ -747,6 +747,7 @@ export type Control< _reset: UseFormReset; _options: UseFormProps; _getDirty: GetIsDirty; + _resetDefaultValues: Noop; _formState: FormState; _updateValid: (shouldUpdateValid?: boolean) => void; _updateFormState: (formState: Partial>) => void; diff --git a/src/useForm.ts b/src/useForm.ts index 4255252812a..a32278b6532 100644 --- a/src/useForm.ts +++ b/src/useForm.ts @@ -102,6 +102,8 @@ export function useForm< React.useEffect(() => { if (props.values && !deepEqual(props.values, control._defaultValues)) { control._reset(props.values, control._options.resetOptions); + } else { + control._resetDefaultValues(); } }, [props.values, control]);