From a720c2444b64d28743ba0500aa970419029352cb Mon Sep 17 00:00:00 2001 From: Abdelrahman Awad Date: Thu, 5 Aug 2021 22:19:44 +0200 Subject: [PATCH] fix: ensure to clone user passed values in setters closes #3428 --- packages/vee-validate/src/useField.ts | 5 +++-- packages/vee-validate/src/useForm.ts | 23 +++++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/vee-validate/src/useField.ts b/packages/vee-validate/src/useField.ts index 04db029fd..04cdb0974 100644 --- a/packages/vee-validate/src/useField.ts +++ b/packages/vee-validate/src/useField.ts @@ -13,6 +13,7 @@ import { nextTick, } from 'vue'; import { BaseSchema } from 'yup'; +import { klona as deepCopy } from 'klona/lite'; import isEqual from 'fast-deep-equal/es6'; import { validate as validateValue } from './validate'; import { @@ -404,8 +405,8 @@ function useValidationState({ form.setFieldValue(fieldPath, newValue, { force: true }); form.setFieldInitialValue(fieldPath, newValue); } else { - value.value = newValue; - initialValueRef.value = newValue; + value.value = deepCopy(newValue); + initialValueRef.value = deepCopy(newValue); } setErrors(state?.errors || []); diff --git a/packages/vee-validate/src/useForm.ts b/packages/vee-validate/src/useForm.ts index 7b3fe566a..8dba77771 100644 --- a/packages/vee-validate/src/useForm.ts +++ b/packages/vee-validate/src/useForm.ts @@ -192,15 +192,18 @@ export function useForm = Record { valuesByFid[fieldItem.fid] = newVal; @@ -211,10 +214,12 @@ export function useForm = Record( - getFromPath(formValues, field as string) as TValues[T], - value as TValues[T], - unref(fieldInstance.uncheckedValue) as TValues[T] + newValue = deepCopy( + resolveNextCheckboxValue( + getFromPath(formValues, field as string) as TValues[T], + value as TValues[T], + unref(fieldInstance.uncheckedValue) as TValues[T] + ) ); } @@ -492,7 +497,7 @@ export function useForm = Record>( }); function setInitialValues(values: Partial, updateFields = false) { - initialValues.value = { - ...values, - }; + initialValues.value = deepCopy(values); if (!updateFields) { return;