Skip to content

Commit

Permalink
fix(@uform/core): add values to submit resolve callback params (#508)
Browse files Browse the repository at this point in the history
  • Loading branch information
janryWang authored Dec 16, 2019
1 parent 4d82891 commit 06c4f63
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 21 deletions.
44 changes: 27 additions & 17 deletions packages/core/src/__tests__/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ describe('submit', () => {
expect(onSubmitFn).toBeCalledTimes(2)
const result = await form2.submit(changeSubmitPayload)
expect(result).toEqual({
values: {},
validated: {
errors: [],
warnings: []
Expand Down Expand Up @@ -274,18 +275,25 @@ describe('reset', () => {
form.registerField({ path: 'c' })

await form.reset({ selector: 'a' })
expect(form.getFormState(state => state.values)).toEqual({ a: undefined, b: 2, c: 3 })
expect(form.getFormState(state => state.values)).toEqual({
a: undefined,
b: 2,
c: 3
})
})

test('validate follow reset ', async () => {
const form = createForm({
values: {}
})

form.registerField({ path: 'a', rules: [{ required: true, message: 'reset validate msg' }] })
form.registerField({
path: 'a',
rules: [{ required: true, message: 'reset validate msg' }]
})

await form.reset()
await form.validate("", { throwErrors: false })
await form.validate('', { throwErrors: false })
const errors = form.getFormState(state => state.errors)
expect(errors).toEqual([{ path: 'a', messages: ['reset validate msg'] }])
})
Expand Down Expand Up @@ -380,9 +388,9 @@ describe('clearErrors', () => {
v === undefined ? { type: 'error', message: 'error msg' } : undefined
]
}) // CustomValidator error
const result1 = await form.validate("", { throwErrors: false })
const result1 = await form.validate('', { throwErrors: false })
expect(result1.warnings).toEqual([{ path: 'b', messages: warnMsg }])
expect(result1.errors).toEqual([{ path: 'c', messages: errMsg }])
expect(result1.errors).toEqual([{ path: 'c', messages: errMsg }])

form.clearErrors('b')
expect(form.getFormState(state => state.warnings)).toEqual([])
Expand All @@ -394,7 +402,7 @@ describe('clearErrors', () => {
expect(form.getFormState(state => state.warnings)).toEqual([])
expect(form.getFormState(state => state.errors)).toEqual([])

const result2 = await form.validate("", { throwErrors: false })
const result2 = await form.validate('', { throwErrors: false })
expect(result2.warnings).toEqual([{ path: 'b', messages: warnMsg }])
expect(result2.errors).toEqual([{ path: 'c', messages: errMsg }])

Expand Down Expand Up @@ -506,7 +514,7 @@ describe('validate', () => {
expect(form.getFieldState('b', state => state.warnings)).toEqual([
'warning msg'
])

expect(form.getFieldState('c', state => state.errors)).toEqual([])
expect(form.getFormState(state => state.warnings)).toEqual([
{ path: 'b', messages: ['warning msg'] }
Expand All @@ -516,7 +524,7 @@ describe('validate', () => {
const cResult = await form.validate('c', { throwErrors: false })
expect(cResult.warnings).toEqual([])
expect(cResult.errors).toEqual([{ path: 'c', messages: ['error msg'] }])

expect(form.getFieldState('b', state => state.warnings)).toEqual([
'warning msg'
])
Expand Down Expand Up @@ -578,7 +586,7 @@ describe('setFormState', () => {
]
}) // CustomValidator error
let invalid = false
const validateResult = await form.validate("", { throwErrors: false })
const validateResult = await form.validate('', { throwErrors: false })
invalid = validateResult.errors.length > 0

const values = { b: '2' }
Expand All @@ -599,7 +607,10 @@ describe('setFormState', () => {
state.unmounted = true
state.props = { hello: 'world' }
})
const { warnings, errors } = form.getFormState(({ warnings, errors }) => ({ warnings, errors }))
const { warnings, errors } = form.getFormState(({ warnings, errors }) => ({
warnings,
errors
}))
expect(form.getFormState()).toEqual({
displayName: 'FormState',
pristine: isEqual(values, initialValues),
Expand Down Expand Up @@ -829,7 +840,7 @@ describe('setFieldState', () => {
const result = await mutators.validate({ throwErrors: false })
expect(result.errors).toEqual([{ path: 'a', messages: ['error msg'] }])
expect(result.warnings).toEqual([{ path: 'a', messages: ['warning msg'] }])

// 校验后影响的是ruleErrors, ruleWarnings
const state2 = form.getFieldState('a')
expect(state2.effectErrors).toEqual([])
Expand Down Expand Up @@ -862,7 +873,7 @@ describe('setFieldState', () => {

// 隐藏,清空所有错误和警告信息
await mutators.validate({ throwErrors: false })

form.setFieldState('a', state => (state.errors = ['effect errors msg']))
form.setFieldState('a', state => (state.warnings = ['effect warning msg']))
form.setFieldState('a', state => (state.visible = false))
Expand All @@ -874,7 +885,7 @@ describe('setFieldState', () => {

// 卸载组件,清空所有错误和警告信息
await mutators.validate({ throwErrors: false })

form.setFieldState('a', state => (state.errors = ['effect errors msg']))
form.setFieldState('a', state => (state.warnings = ['effect warning msg']))
const state7 = form.getFieldState('a')
Expand Down Expand Up @@ -1494,7 +1505,7 @@ describe('validator', () => {
state.value = 'hello world'
})

await form.validate("", { throwErrors: false })
await form.validate('', { throwErrors: false })

form.getFormState(state =>
expect(state.errors).toEqual([
Expand Down Expand Up @@ -1534,7 +1545,7 @@ describe('validator', () => {
state.value = '123'
})

await form.validate("", { throwErrors: false })
await form.validate('', { throwErrors: false })

form.getFormState(state =>
expect(state.errors).toEqual([
Expand Down Expand Up @@ -1581,8 +1592,7 @@ describe('validator', () => {
state.value = 123
})


await form.validate("", { throwErrors: false })
await form.validate('', { throwErrors: false })

form.getFormState(state =>
expect(state.errors).toEqual([
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -813,18 +813,18 @@ export function createForm<FieldProps, VirtualFieldProps>(
}))
heart.publish(LifeCycleTypes.ON_FORM_SUBMIT, state)

let payload
let payload,
values = state.getState(state => clone(state.values))
if (isFn(onSubmit)) {
payload = await Promise.resolve(
onSubmit(state.getState(state => clone(state.values)))
)
payload = await Promise.resolve(onSubmit(values))
}

state.setState(state => {
state.submitting = false
})
heart.publish(LifeCycleTypes.ON_FORM_SUBMIT_END, state)
return {
values,
validated,
payload
}
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ export interface IVirtualFieldStateProps<FieldProps = any> {
export type IFormValidateResult = ValidateNodeResult

export interface IFormSubmitResult {
values: any
validated: IFormValidateResult
payload: any
}
Expand Down

0 comments on commit 06c4f63

Please sign in to comment.