Skip to content

Commit c8cfbe0

Browse files
authored
fix: subfield data is removed properly when calling removeFieldValue (#1197)
1 parent 2d04246 commit c8cfbe0

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

packages/form-core/src/metaHelper.ts

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ export function metaHelper<
110110
const nextFieldMeta = formApi.getFieldMeta(nextFieldKey)
111111
if (nextFieldMeta) {
112112
formApi.setFieldMeta(fieldKey, nextFieldMeta)
113+
} else {
114+
formApi.setFieldMeta(fieldKey, getEmptyFieldMeta())
113115
}
114116
})
115117
}

packages/form-core/tests/FieldApi.spec.ts

+45
Original file line numberDiff line numberDiff line change
@@ -1760,4 +1760,49 @@ describe('field api', () => {
17601760
nameField.mount()
17611761
expect(nameField.getMeta().errors).toEqual(['THERE IS AN ERROR'])
17621762
})
1763+
1764+
it('should remove the meta from deleted fields', async () => {
1765+
const form = new FormApi({
1766+
defaultValues: {
1767+
names: [
1768+
{
1769+
firstName: 'John',
1770+
lastName: '',
1771+
},
1772+
{
1773+
firstName: 'Martha',
1774+
lastName: 'Mustermann',
1775+
},
1776+
],
1777+
},
1778+
})
1779+
1780+
const field = new FieldApi({
1781+
form,
1782+
name: `names[${0}].lastName`,
1783+
validators: {
1784+
onMount: ({ value }) =>
1785+
value.length > 0 ? undefined : 'Last name is required',
1786+
onChange: ({ value }) =>
1787+
value.length > 0 ? undefined : 'Last name is required',
1788+
},
1789+
})
1790+
1791+
form.mount()
1792+
field.mount()
1793+
1794+
expect(form.state.canSubmit).toBe(false)
1795+
1796+
await form.removeFieldValue('names', 0)
1797+
1798+
expect(form.getFieldValue('names')).toEqual([
1799+
{
1800+
firstName: 'Martha',
1801+
lastName: 'Mustermann',
1802+
},
1803+
])
1804+
1805+
expect(field.getMeta().errors).toStrictEqual([])
1806+
expect(form.state.canSubmit).toBe(true)
1807+
})
17631808
})

0 commit comments

Comments
 (0)