fix: form's valid state should be up to date (#475)

This commit is contained in:
☕️ mino
2023-10-18 05:23:09 -05:00
committed by GitHub
parent d739f2a064
commit 2b2ed02311
2 changed files with 36 additions and 2 deletions

View File

@@ -134,8 +134,10 @@ export class FormApi<TFormData, ValidatorType> {
(field) => field?.isValidating,
)
const isFieldsValid = !fieldMetaValues.some((field) =>
isNonEmptyArray(field?.errors),
const isFieldsValid = !fieldMetaValues.some(
(field) =>
field?.errorMap &&
isNonEmptyArray(Object.values(field.errorMap).filter(Boolean)),
)
const isTouched = fieldMetaValues.some((field) => field?.isTouched)

View File

@@ -1,6 +1,7 @@
import { expect } from 'vitest'
import { FormApi } from '../FormApi'
import { FieldApi } from '../FieldApi'
describe('form api', () => {
it('should get default form state', () => {
@@ -267,4 +268,35 @@ describe('form api', () => {
expect(form.getFieldValue('name')).toEqual('two')
})
it("form's valid state should be work fine", () => {
const form = new FormApi({
defaultValues: {
name: '',
},
})
const field = new FieldApi({
form,
name: 'name',
onChange: (v) => (v.length > 0 ? undefined : 'required'),
})
field.mount()
field.handleChange('one')
expect(form.state.isFieldsValid).toEqual(true)
expect(form.state.canSubmit).toEqual(true)
field.handleChange('')
expect(form.state.isFieldsValid).toEqual(false)
expect(form.state.canSubmit).toEqual(false)
field.handleChange('two')
expect(form.state.isFieldsValid).toEqual(true)
expect(form.state.canSubmit).toEqual(true)
})
})