Skip to content

Commit 77345c4

Browse files
committed
fix: reset form should merge values closes #4320
1 parent 402a923 commit 77345c4

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

.changeset/chilly-owls-wonder.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'vee-validate': patch
3+
---
4+
5+
fix: reset form should merge values closes #4320

packages/vee-validate/src/useForm.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,8 +1050,8 @@ function useFormInitialValues<TValues extends GenericObject>(
10501050
const originalInitialValues = ref<PartialDeep<TValues>>(deepCopy(values)) as Ref<PartialDeep<TValues>>;
10511051

10521052
function setInitialValues(values: PartialDeep<TValues>, updateFields = false) {
1053-
initialValues.value = deepCopy(values);
1054-
originalInitialValues.value = deepCopy(values);
1053+
initialValues.value = merge(deepCopy(initialValues.value) || {}, deepCopy(values));
1054+
originalInitialValues.value = merge(deepCopy(originalInitialValues.value) || {}, deepCopy(values));
10551055

10561056
if (!updateFields) {
10571057
return;

packages/vee-validate/tests/useForm.spec.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,33 @@ describe('useForm()', () => {
719719
expect(meta.validated).toBe(false);
720720
});
721721

722+
// #4320
723+
test('Initial values are merged with previous values to ensure meta.dirty is stable', async () => {
724+
let meta!: Ref<FieldMeta<any>>;
725+
726+
mountWithHoc({
727+
setup() {
728+
const { resetForm, meta: fm } = useForm();
729+
useField('name');
730+
useField('email');
731+
732+
meta = fm;
733+
734+
onMounted(() => {
735+
resetForm({ values: { name: 'test' } });
736+
});
737+
738+
return {};
739+
},
740+
template: `
741+
<div></div>
742+
`,
743+
});
744+
745+
await flushPromises();
746+
expect(meta.value.dirty).toBe(false);
747+
});
748+
722749
// #3991
723750
test('initial value should not be mutable if nested field model is used', async () => {
724751
let model!: Ref<{ name: string }>;

0 commit comments

Comments
 (0)