From 372280faf0c92b8f5a6c17d1e4f28ad3d654e18d Mon Sep 17 00:00:00 2001 From: rdjanuar Date: Wed, 20 Nov 2024 08:58:36 +0700 Subject: [PATCH 1/2] fix(Form): resolve async validation in yup & issue directly mutate state --- src/runtime/components/forms/Form.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/runtime/components/forms/Form.vue b/src/runtime/components/forms/Form.vue index f02b630989..1089af5b8c 100644 --- a/src/runtime/components/forms/Form.vue +++ b/src/runtime/components/forms/Form.vue @@ -60,6 +60,8 @@ export default defineComponent({ const formId = useId() const bus = useEventBus(`form-${formId}`) + const parsedValue = ref(null) + onMounted(() => { bus.on(async (event) => { if (event.type !== 'submit' && props.validateOn?.includes(event.type)) { @@ -87,7 +89,7 @@ export default defineComponent({ if (errors) { errs = errs.concat(errors) } else { - Object.assign(props.state, result) + parsedValue.value = result } } @@ -130,7 +132,7 @@ export default defineComponent({ if (props.validateOn?.includes('submit')) { await validate() } - event.data = props.state + event.data = parsedValue.value emit('submit', event) } catch (error) { if (!(error instanceof FormException)) { @@ -321,7 +323,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 From c06b4dbf1bc5d6abeab65ffb16abc6522755173b Mon Sep 17 00:00:00 2001 From: rdjanuar Date: Wed, 20 Nov 2024 09:23:19 +0700 Subject: [PATCH 2/2] up --- src/runtime/components/forms/Form.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/components/forms/Form.vue b/src/runtime/components/forms/Form.vue index 1089af5b8c..2eb4c9642d 100644 --- a/src/runtime/components/forms/Form.vue +++ b/src/runtime/components/forms/Form.vue @@ -132,7 +132,7 @@ export default defineComponent({ if (props.validateOn?.includes('submit')) { await validate() } - event.data = parsedValue.value + event.data = props.schema ? parsedValue.value : props.state emit('submit', event) } catch (error) { if (!(error instanceof FormException)) {