diff --git a/src/runtime/components/Form.vue b/src/runtime/components/Form.vue index dbb4fb54..3471dcc2 100644 --- a/src/runtime/components/Form.vue +++ b/src/runtime/components/Form.vue @@ -104,6 +104,7 @@ function resolveErrorIds(errs: FormError[]): FormErrorWithId[] { })) } +const parsedValue = ref(null) async function getErrors(): Promise { let errs = props.validate ? (await props.validate(props.state)) ?? [] : [] @@ -112,7 +113,7 @@ async function getErrors(): Promise { if (errors) { errs = errs.concat(errors) } else { - Object.assign(props.state, result) + parsedValue.value = result } } @@ -169,7 +170,7 @@ async function onSubmitWrapper(payload: Event) { try { await _validate({ nested: true }) - event.data = props.state + event.data = props.schema ? parsedValue.value : props.state await props.onSubmit?.(event) } catch (error) { if (!(error instanceof FormValidationException)) { diff --git a/src/runtime/utils/form.ts b/src/runtime/utils/form.ts index 487976fa..6c82277e 100644 --- a/src/runtime/utils/form.ts +++ b/src/runtime/utils/form.ts @@ -72,7 +72,7 @@ async function validateYupSchema( schema: YupObjectSchema ): Promise> { try { - const result = schema.validateSync(state, { abortEarly: false }) + const result = await schema.validate(state, { abortEarly: false }) return { errors: null, result diff --git a/test/components/Form.spec.ts b/test/components/Form.spec.ts index 897568ae..0a0f2ddb 100644 --- a/test/components/Form.spec.ts +++ b/test/components/Form.spec.ts @@ -422,7 +422,6 @@ describe('Form', () => { ` }) const form = wrapper.setupState.form - const state = wrapper.setupState.state const inputEl = wrapper.find('#input') inputEl.setValue(input.value) @@ -430,7 +429,6 @@ describe('Form', () => { form.value.submit() await flushPromises() - expect(state.value).toEqual(expected.value) expect(wrapper.setupState.onSubmit).toHaveBeenCalledWith(expect.objectContaining({ data: expected }))