diff --git a/packages/core/src/__test__/form.spec.js b/packages/core/src/__test__/form.spec.js new file mode 100644 index 00000000000..097cf68678f --- /dev/null +++ b/packages/core/src/__test__/form.spec.js @@ -0,0 +1,46 @@ +import { createForm } from '../index' + +test('Increase lastValidateValue value processing during initialization', async () => { + const inpueFieldValidate = jest.fn() + const requriedFieldValidate = jest.fn() + + const form = createForm({ + initialValues: { + requriedField: 'defaultValue' + } + }) + + form.registerField('inpueField', { + props: { + requried: true, + 'x-rules': () => + new Promise(resolve => { + inpueFieldValidate() + + resolve() + }) + } + }) + + form.registerField('requriedField', { + props: { + requried: true, + 'x-rules': () => + new Promise(resolve => { + requriedFieldValidate() + + resolve() + }) + } + }) + + form.setValue('inpueField', 1111) + await sleep(1000) + expect(inpueFieldValidate).toHaveBeenCalledTimes(1) + expect(requriedFieldValidate).toHaveBeenCalledTimes(0) + + form.setValue('requriedField', 2222) + await sleep(1000) + expect(inpueFieldValidate).toHaveBeenCalledTimes(1) + expect(requriedFieldValidate).toHaveBeenCalledTimes(1) +}) diff --git a/packages/core/src/field.ts b/packages/core/src/field.ts index 390ee63b8fb..8d6cce91774 100644 --- a/packages/core/src/field.ts +++ b/packages/core/src/field.ts @@ -131,6 +131,10 @@ export class Field implements IField { this.editable = !isEmpty(editable) ? editable : this.getContextEditable() } + if (options.initialValue) { + this.lastValidateValue = options.initialValue + } + if ( this.pristine && !isEmpty(this.initialValue) && diff --git a/packages/react/src/__tests__/schema_form.spec.js b/packages/react/src/__tests__/schema_form.spec.js new file mode 100644 index 00000000000..76463884e7c --- /dev/null +++ b/packages/react/src/__tests__/schema_form.spec.js @@ -0,0 +1,60 @@ +import React from 'react' +import { render, fireEvent } from '@testing-library/react' + +import SchemaForm, { Field, registerFormField, connect } from '../index' + +registerFormField( + 'string', + connect()(props => ( + + )) +) + +test('Increase lastValidateValue value processing during initialization', async () => { + const inpueFieldValidate = jest.fn() + const requriedFieldValidate = jest.fn() + + const TestComponent = () => ( + + + new Promise(resolve => { + inpueFieldValidate() + + resolve() + }) + } + /> + + new Promise(resolve => { + requriedFieldValidate() + + resolve() + }) + } + /> + + ) + + const { getByTestId } = render() + fireEvent.change(getByTestId('inpueField'), { target: { value: 1111 } }) + await sleep(1000) + expect(inpueFieldValidate).toHaveBeenCalledTimes(1) + expect(requriedFieldValidate).toHaveBeenCalledTimes(0) + + fireEvent.change(getByTestId('requriedField'), { target: { value: 2222 } }) + await sleep(1000) + expect(inpueFieldValidate).toHaveBeenCalledTimes(1) + expect(requriedFieldValidate).toHaveBeenCalledTimes(1) +})