Skip to content

Commit

Permalink
fix #11719 validation stuck on true state (#11723)
Browse files Browse the repository at this point in the history
* fix #11719 validation stuck on true state

* fix tests

* fix test
  • Loading branch information
bluebill1049 committed Mar 26, 2024
1 parent 00ce24a commit dce13a6
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/__tests__/controller.test.tsx
Expand Up @@ -313,7 +313,7 @@ describe('Controller', () => {
jest.advanceTimersByTime(1100);
});

expect(validatingFields).toEqual({ test: false });
expect(validatingFields).toEqual({});
expect(screen.getByText('isValidating: false')).toBeVisible();
});

Expand Down
17 changes: 4 additions & 13 deletions src/__tests__/useForm.test.tsx
Expand Up @@ -1787,7 +1787,6 @@ describe('useForm', () => {
expect(formState.isValidating).toBe(true);
expect(formState.validatingFields).toStrictEqual({
lastName: true,
firstName: false,
});
expect(getFieldState('lastName').isValidating).toBe(true);
expect(getFieldState('firstName').isValidating).toBe(false);
Expand All @@ -1798,10 +1797,7 @@ describe('useForm', () => {
});

expect(formState.isValidating).toBe(false);
expect(formState.validatingFields).toStrictEqual({
lastName: false,
firstName: false,
});
expect(formState.validatingFields).toStrictEqual({});
expect(getFieldState('lastName').isValidating).toBe(false);
expect(getFieldState('firstName').isValidating).toBe(false);
screen.getByText('stateValidation: false');
Expand Down Expand Up @@ -1881,7 +1877,7 @@ describe('useForm', () => {
jest.advanceTimersByTime(1500);
});

expect(formState.validatingFields).toStrictEqual({ lastName: false });
expect(formState.validatingFields).toStrictEqual({});
expect(getFieldState('lastName').isValidating).toBe(false);
});

Expand Down Expand Up @@ -1954,10 +1950,7 @@ describe('useForm', () => {
});

expect(formState.isValidating).toBe(false);
expect(formState.validatingFields).toStrictEqual({
lastName: false,
firstName: false,
});
expect(formState.validatingFields).toStrictEqual({});
expect(getFieldState('lastName').isValidating).toBe(false);
expect(getFieldState('firstName').isValidating).toBe(false);
});
Expand Down Expand Up @@ -2002,9 +1995,7 @@ describe('useForm', () => {
unregister('firstName');
jest.runAllTimers();
});
expect(formState.validatingFields).toEqual({
firstName: false,
});
expect(formState.validatingFields).toEqual({});
});

it('should update defaultValues async', async () => {
Expand Down
17 changes: 9 additions & 8 deletions src/logic/createFormControl.ts
Expand Up @@ -179,16 +179,17 @@ export function createFormControl<

const _updateIsValidating = (names?: string[], isValidating?: boolean) => {
if (_proxyFormState.isValidating || _proxyFormState.validatingFields) {
(names || Array.from(_names.mount)).forEach(
(name) =>
name && set(_formState.validatingFields, name, !!isValidating),
);
_formState.isValidating = Object.values(_formState.validatingFields).some(
(val) => val,
);
(names || Array.from(_names.mount)).forEach((name) => {
if (name) {
isValidating
? set(_formState.validatingFields, name, isValidating)
: unset(_formState.validatingFields, name);
}
});

_subjects.state.next({
validatingFields: _formState.validatingFields,
isValidating: _formState.isValidating,
isValidating: !isEmptyObject(_formState.validatingFields),
});
}
};
Expand Down

0 comments on commit dce13a6

Please sign in to comment.