Skip to content

Commit

Permalink
fix: reset form should merge values closes #4320
Browse files Browse the repository at this point in the history
  • Loading branch information
logaretm committed Jun 19, 2023
1 parent 402a923 commit 77345c4
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changeset/chilly-owls-wonder.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'vee-validate': patch
---

fix: reset form should merge values closes #4320
4 changes: 2 additions & 2 deletions packages/vee-validate/src/useForm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1050,8 +1050,8 @@ function useFormInitialValues<TValues extends GenericObject>(
const originalInitialValues = ref<PartialDeep<TValues>>(deepCopy(values)) as Ref<PartialDeep<TValues>>;

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

if (!updateFields) {
return;
Expand Down
27 changes: 27 additions & 0 deletions packages/vee-validate/tests/useForm.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -719,6 +719,33 @@ describe('useForm()', () => {
expect(meta.validated).toBe(false);
});

// #4320
test('Initial values are merged with previous values to ensure meta.dirty is stable', async () => {
let meta!: Ref<FieldMeta<any>>;

mountWithHoc({
setup() {
const { resetForm, meta: fm } = useForm();
useField('name');
useField('email');

meta = fm;

onMounted(() => {
resetForm({ values: { name: 'test' } });
});

return {};
},
template: `
<div></div>
`,
});

await flushPromises();
expect(meta.value.dirty).toBe(false);
});

// #3991
test('initial value should not be mutable if nested field model is used', async () => {
let model!: Ref<{ name: string }>;
Expand Down

0 comments on commit 77345c4

Please sign in to comment.