From dfd06c5c3b07ac3d1d4f92af1199ebf7c32b667c Mon Sep 17 00:00:00 2001 From: Kamil Kusy Date: Tue, 19 Aug 2025 20:15:29 +0200 Subject: [PATCH 1/6] fix(core): fix deleteField method --- packages/form-core/src/FormApi.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/form-core/src/FormApi.ts b/packages/form-core/src/FormApi.ts index 78e7fa8a4..97ce2d157 100644 --- a/packages/form-core/src/FormApi.ts +++ b/packages/form-core/src/FormApi.ts @@ -1543,6 +1543,11 @@ export class FormApi< for (const field of Object.keys( this.state.fieldMeta, ) as DeepKeys[]) { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (this.baseStore.state.fieldMetaBase[field] === undefined) { + continue + } + const fieldMeta = this.getFieldMeta(field) if (!fieldMeta) continue @@ -1746,6 +1751,11 @@ export class FormApi< for (const field of Object.keys( this.state.fieldMeta, ) as DeepKeys[]) { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (this.baseStore.state.fieldMetaBase[field] === undefined) { + continue + } + const fieldMeta = this.getFieldMeta(field) if (!fieldMeta) continue From 0157f2f736457c7e064baaed524d47cd9ddf98a3 Mon Sep 17 00:00:00 2001 From: LeCarbonator <18158911+LeCarbonator@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:03:35 +0200 Subject: [PATCH 2/6] Create healthy-forks-live.md --- .changeset/healthy-forks-live.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/healthy-forks-live.md diff --git a/.changeset/healthy-forks-live.md b/.changeset/healthy-forks-live.md new file mode 100644 index 000000000..1997937b9 --- /dev/null +++ b/.changeset/healthy-forks-live.md @@ -0,0 +1,5 @@ +--- +"@tanstack/form-core": patch +--- + +fix(core): prevent runtime errors when using `deleteField` From bb1aab9c9209886e2a822d18c066fe4862088dcd Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 05:04:29 +0000 Subject: [PATCH 3/6] ci: apply automated fixes and generate docs --- .changeset/healthy-forks-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/healthy-forks-live.md b/.changeset/healthy-forks-live.md index 1997937b9..6834bb28f 100644 --- a/.changeset/healthy-forks-live.md +++ b/.changeset/healthy-forks-live.md @@ -1,5 +1,5 @@ --- -"@tanstack/form-core": patch +'@tanstack/form-core': patch --- fix(core): prevent runtime errors when using `deleteField` From 45561e33078469a01232b58fb55666ac41013a47 Mon Sep 17 00:00:00 2001 From: LeCarbonator <18158911+LeCarbonator@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:04:45 +0200 Subject: [PATCH 4/6] Update healthy-forks-live.md --- .changeset/healthy-forks-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/healthy-forks-live.md b/.changeset/healthy-forks-live.md index 6834bb28f..a4b16ad24 100644 --- a/.changeset/healthy-forks-live.md +++ b/.changeset/healthy-forks-live.md @@ -2,4 +2,4 @@ '@tanstack/form-core': patch --- -fix(core): prevent runtime errors when using `deleteField` +fix(form-core): prevent runtime errors when using `deleteField` From 748fbad41cfd1be12d55592e3c45c97fb2e160e6 Mon Sep 17 00:00:00 2001 From: LeCarbonator <18158911+LeCarbonator@users.noreply.github.com> Date: Tue, 7 Oct 2025 07:53:41 +0200 Subject: [PATCH 5/6] chore: add tests --- packages/react-form/tests/useForm.test.tsx | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/packages/react-form/tests/useForm.test.tsx b/packages/react-form/tests/useForm.test.tsx index d9495ef19..6234a171c 100644 --- a/packages/react-form/tests/useForm.test.tsx +++ b/packages/react-form/tests/useForm.test.tsx @@ -892,4 +892,70 @@ describe('useForm', () => { await user.click(target) expect(result).toHaveTextContent('1') }) + + it('should not error when using deleteField in edge cases', async () => { + function Comp() { + const form = useForm({ + defaultValues: { + firstName: '', + lastName: '', + }, + validators: { + onChange: ({ value }) => { + const fields: Record = {} + + if (value.firstName.length === 0) { + fields.firstName = 'Last Name is required' + } + + return { fields } + }, + }, + }) + + return ( +
{ + e.preventDefault() + form.handleSubmit() + }} + > +

Personal Information

+ ( + field.handleChange(e.target.value)} + /> + )} + /> + ( + field.handleChange(e.target.value)} + /> + )} + /> + + + ) + } + + const { getByTestId } = render() + const removeButton = getByTestId('remove') + const input = getByTestId('input') + + await user.type(input, 'a') + await user.click(removeButton) + }) }) From 842956e56a8c3e94d53f7b2721723818251ab6db Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 05:59:42 +0000 Subject: [PATCH 6/6] ci: apply automated fixes and generate docs --- packages/react-form/tests/useForm.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-form/tests/useForm.test.tsx b/packages/react-form/tests/useForm.test.tsx index 6234a171c..d3a566180 100644 --- a/packages/react-form/tests/useForm.test.tsx +++ b/packages/react-form/tests/useForm.test.tsx @@ -893,7 +893,7 @@ describe('useForm', () => { expect(result).toHaveTextContent('1') }) - it('should not error when using deleteField in edge cases', async () => { + it('should not error when using deleteField in edge cases', async () => { function Comp() { const form = useForm({ defaultValues: {