diff --git a/packages/form-core/src/formOptions.ts b/packages/form-core/src/formOptions.ts index e77460e6c..abfdfa6da 100644 --- a/packages/form-core/src/formOptions.ts +++ b/packages/form-core/src/formOptions.ts @@ -21,21 +21,19 @@ without losing the benefits from the TOptions generic. */ export function formOptions< - TOptions extends Partial< - FormOptions< - TFormData, - TOnMount, - TOnChange, - TOnChangeAsync, - TOnBlur, - TOnBlurAsync, - TOnSubmit, - TOnSubmitAsync, - TOnDynamic, - TOnDynamicAsync, - TOnServer, - TSubmitMeta - > + TOptions extends FormOptions< + TFormData, + TOnMount, + TOnChange, + TOnChangeAsync, + TOnBlur, + TOnBlurAsync, + TOnSubmit, + TOnSubmitAsync, + TOnDynamic, + TOnDynamicAsync, + TOnServer, + TSubmitMeta >, TFormData, TOnMount extends undefined | FormValidateOrFn, @@ -50,21 +48,19 @@ export function formOptions< TOnServer extends undefined | FormAsyncValidateOrFn, TSubmitMeta = never, >( - defaultOpts: Partial< - FormOptions< - TFormData, - TOnMount, - TOnChange, - TOnChangeAsync, - TOnBlur, - TOnBlurAsync, - TOnSubmit, - TOnSubmitAsync, - TOnDynamic, - TOnDynamicAsync, - TOnServer, - TSubmitMeta - > + defaultOpts: FormOptions< + TFormData, + TOnMount, + TOnChange, + TOnChangeAsync, + TOnBlur, + TOnBlurAsync, + TOnSubmit, + TOnSubmitAsync, + TOnDynamic, + TOnDynamicAsync, + TOnServer, + TSubmitMeta > & TOptions, ): TOptions { diff --git a/packages/form-core/tests/formOptions.test-d.ts b/packages/form-core/tests/formOptions.test-d.ts index c13ae7d7f..d9be3cd9b 100644 --- a/packages/form-core/tests/formOptions.test-d.ts +++ b/packages/form-core/tests/formOptions.test-d.ts @@ -323,4 +323,73 @@ describe('formOptions', () => { (undefined | 'Too short!' | 'needs formId')[] >() }) + + it('should allow form options to be passed to form with submit logic, and validators', () => { + type FormData = { + firstName: string + lastName: string + } + + const formOpts = formOptions({ + defaultValues: { + firstName: '', + lastName: '', + } as FormData, + onSubmit: (data) => { + console.log(data) + }, + validators: { + onSubmit: (data) => {}, + }, + }) + + const form = new FormApi(formOpts) + }) + + it('should allow form options to be passed to form with submit logic, and listeners', () => { + type FormData = { + firstName: string + lastName: string + } + + const formOpts = formOptions({ + defaultValues: { + firstName: '', + lastName: '', + } as FormData, + onSubmit: (data) => { + console.log(data) + }, + listeners: { + onSubmit: (data) => {}, + }, + }) + + const form = new FormApi(formOpts) + }) + + it('should allow form options to be passed to form with submit logic, listeners, and validators', () => { + type FormData = { + firstName: string + lastName: string + } + + const formOpts = formOptions({ + defaultValues: { + firstName: '', + lastName: '', + } as FormData, + onSubmit: (data) => { + console.log(data) + }, + listeners: { + onSubmit: (data) => {}, + }, + validators: { + onSubmit: (data) => {}, + }, + }) + + const form = new FormApi(formOpts) + }) })