Skip to content

Commit 3e99f6f

Browse files
committed
fix(form-core): fix form.resetField() ignoring nested fields
1 parent bfb8c42 commit 3e99f6f

File tree

2 files changed

+61
-6
lines changed

2 files changed

+61
-6
lines changed

packages/form-core/src/FormApi.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2109,12 +2109,9 @@ export class FormApi<
21092109
...prev.fieldMetaBase,
21102110
[field]: defaultFieldMeta,
21112111
},
2112-
values: {
2113-
...prev.values,
2114-
[field]:
2115-
this.options.defaultValues &&
2116-
this.options.defaultValues[field as keyof TFormData],
2117-
},
2112+
values: this.options.defaultValues
2113+
? setBy(prev.values, field, getBy(this.options.defaultValues, field))
2114+
: prev.values,
21182115
}
21192116
})
21202117
}

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

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3580,3 +3580,61 @@ it('should mark sourceMap as undefined when async field error is resolved', asyn
35803580

35813581
expect(field.getMeta().errorSourceMap.onChange).toBeUndefined()
35823582
})
3583+
3584+
it('should reset nested fields', () => {
3585+
const defaultValues = {
3586+
shallow: '',
3587+
nested: {
3588+
field: {
3589+
name: '',
3590+
},
3591+
},
3592+
}
3593+
3594+
const form = new FormApi({
3595+
defaultValues,
3596+
})
3597+
form.mount()
3598+
3599+
form.setFieldValue('shallow', 'Shallow')
3600+
form.setFieldValue('nested.field.name', 'Nested')
3601+
3602+
expect(form.state.values.shallow).toEqual('Shallow')
3603+
expect(form.state.values.nested.field.name).toEqual('Nested')
3604+
3605+
form.resetField('shallow')
3606+
expect(form.state.values.shallow).toEqual('')
3607+
3608+
form.resetField('nested.field.name')
3609+
expect(form.state.values.nested.field.name).toEqual('')
3610+
})
3611+
3612+
it('should preserve nested fields on resetField if defaultValues is not provided', () => {
3613+
const defaultValues = {
3614+
shallow: '',
3615+
nested: {
3616+
field: {
3617+
name: '',
3618+
},
3619+
},
3620+
}
3621+
3622+
const form = new FormApi({
3623+
defaultState: {
3624+
values: defaultValues,
3625+
},
3626+
})
3627+
form.mount()
3628+
3629+
form.setFieldValue('shallow', 'Shallow')
3630+
form.setFieldValue('nested.field.name', 'Nested')
3631+
3632+
expect(form.state.values.shallow).toEqual('Shallow')
3633+
expect(form.state.values.nested.field.name).toEqual('Nested')
3634+
3635+
form.resetField('shallow')
3636+
expect(form.state.values.shallow).toEqual('Shallow')
3637+
3638+
form.resetField('nested.field.name')
3639+
expect(form.state.values.nested.field.name).toEqual('Nested')
3640+
})

0 commit comments

Comments
 (0)