Skip to content

Commit a3ea544

Browse files
committed
feat(solid-form): add createFormHook for solid-js.
1 parent 7b365d9 commit a3ea544

File tree

6 files changed

+823
-38
lines changed

6 files changed

+823
-38
lines changed

packages/solid-form/src/createField.tsx

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { FieldApi } from '@tanstack/form-core'
22
import {
33
createComponent,
44
createComputed,
5-
createMemo,
65
createSignal,
76
onCleanup,
87
onMount,
@@ -17,7 +16,7 @@ import type {
1716
Narrow,
1817
} from '@tanstack/form-core'
1918

20-
import type { JSXElement } from 'solid-js'
19+
import type { Accessor, Component, JSX, JSXElement } from 'solid-js'
2120
import type { CreateFieldOptions, CreateFieldOptionsBound } from './types'
2221

2322
interface SolidFieldApi<
@@ -359,7 +358,8 @@ interface FieldComponentBoundProps<
359358
TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
360359
TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
361360
TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
362-
TParentSubmitMeta,
361+
TPatentSubmitMeta,
362+
ExtendedApi = {},
363363
> extends CreateFieldOptionsBound<
364364
TParentData,
365365
TName,
@@ -373,43 +373,56 @@ interface FieldComponentBoundProps<
373373
TOnSubmitAsync
374374
> {
375375
children: (
376-
fieldApi: () => FieldApi<
377-
TParentData,
378-
TName,
379-
TData,
380-
TOnMount,
381-
TOnChange,
382-
TOnChangeAsync,
383-
TOnBlur,
384-
TOnBlurAsync,
385-
TOnSubmit,
386-
TOnSubmitAsync,
387-
TFormOnMount,
388-
TFormOnChange,
389-
TFormOnChangeAsync,
390-
TFormOnBlur,
391-
TFormOnBlurAsync,
392-
TFormOnSubmit,
393-
TFormOnSubmitAsync,
394-
TFormOnServer,
395-
TParentSubmitMeta
396-
>,
397-
) => JSXElement
376+
fieldApi: Accessor<
377+
FieldApi<
378+
TParentData,
379+
TName,
380+
TData,
381+
TOnMount,
382+
TOnChange,
383+
TOnChangeAsync,
384+
TOnBlur,
385+
TOnBlurAsync,
386+
TOnSubmit,
387+
TOnSubmitAsync,
388+
TFormOnMount,
389+
TFormOnChange,
390+
TFormOnChangeAsync,
391+
TFormOnBlur,
392+
TFormOnBlurAsync,
393+
TFormOnSubmit,
394+
TFormOnSubmitAsync,
395+
TFormOnServer,
396+
TPatentSubmitMeta
397+
>
398+
> &
399+
ExtendedApi,
400+
) => JSX.Element
398401
}
399402

403+
/**
404+
* A type alias representing a field component for a specific form data type.
405+
*/
400406
export type FieldComponent<
401-
TParentData,
402-
TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
403-
TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
404-
TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
405-
TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
406-
TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
407-
TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
408-
TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
409-
TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
410-
TParentSubmitMeta,
407+
in out TParentData,
408+
in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
409+
in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
410+
in out TFormOnChangeAsync extends
411+
| undefined
412+
| FormAsyncValidateOrFn<TParentData>,
413+
in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
414+
in out TFormOnBlurAsync extends
415+
| undefined
416+
| FormAsyncValidateOrFn<TParentData>,
417+
in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
418+
in out TFormOnSubmitAsync extends
419+
| undefined
420+
| FormAsyncValidateOrFn<TParentData>,
421+
in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
422+
in out TPatentSubmitMeta,
423+
in out ExtendedApi = {},
411424
> = <
412-
TName extends DeepKeys<TParentData>,
425+
const TName extends DeepKeys<TParentData>,
413426
TData extends DeepValue<TParentData, TName>,
414427
TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
415428
TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,
@@ -446,8 +459,9 @@ export type FieldComponent<
446459
TFormOnSubmit,
447460
TFormOnSubmitAsync,
448461
TFormOnServer,
449-
TParentSubmitMeta
450-
>) => JSXElement
462+
TPatentSubmitMeta,
463+
ExtendedApi
464+
>) => JSX.Element
451465

452466
interface FieldComponentProps<
453467
TParentData,

packages/solid-form/src/createForm.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,44 @@ export interface SolidFormApi<
112112
}) => JSXElement
113113
}
114114

115+
/**
116+
* An extended version of the `FormApi` class that includes React-specific functionalities from `ReactFormApi`
117+
*/
118+
export type SolidFormExtendedApi<
119+
TFormData,
120+
TOnMount extends undefined | FormValidateOrFn<TFormData>,
121+
TOnChange extends undefined | FormValidateOrFn<TFormData>,
122+
TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
123+
TOnBlur extends undefined | FormValidateOrFn<TFormData>,
124+
TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
125+
TOnSubmit extends undefined | FormValidateOrFn<TFormData>,
126+
TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
127+
TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,
128+
TSubmitMeta,
129+
> = FormApi<
130+
TFormData,
131+
TOnMount,
132+
TOnChange,
133+
TOnChangeAsync,
134+
TOnBlur,
135+
TOnBlurAsync,
136+
TOnSubmit,
137+
TOnSubmitAsync,
138+
TOnServer,
139+
TSubmitMeta
140+
> &
141+
SolidFormApi<
142+
TFormData,
143+
TOnMount,
144+
TOnChange,
145+
TOnChangeAsync,
146+
TOnBlur,
147+
TOnBlurAsync,
148+
TOnSubmit,
149+
TOnSubmitAsync,
150+
TOnServer,
151+
TSubmitMeta
152+
>
115153
export function createForm<
116154
TParentData,
117155
TFormOnMount extends undefined | FormValidateOrFn<TParentData>,

0 commit comments

Comments
 (0)