Skip to content

Commit c002b5a

Browse files
committed
feat(form-core): Remove example and implement new fieldOptions and dynamicFieldOptions APIs
1 parent 230c2a0 commit c002b5a

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
import type {
2+
FieldApiOptions,
3+
FieldAsyncValidateOrFn,
4+
FieldValidateOrFn,
5+
} from './FieldApi'
6+
import type {
7+
FormAsyncValidateOrFn,
8+
FormOptions,
9+
FormValidateOrFn,
10+
} from './FormApi'
11+
import type { DeepKeys, DeepValue } from './util-types'
12+
13+
type FieldOptionsExcludingForm<
14+
TFormData,
15+
TOnMount extends undefined | FormValidateOrFn<TFormData>,
16+
TOnChange extends undefined | FormValidateOrFn<TFormData>,
17+
TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
18+
TOnBlur extends undefined | FormValidateOrFn<TFormData>,
19+
TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
20+
TOnSubmit extends undefined | FormValidateOrFn<TFormData>,
21+
TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
22+
TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,
23+
TSubmitMeta,
24+
K extends DeepKeys<TFormData> = DeepKeys<TFormData>,
25+
> = Omit<
26+
FieldApiOptions<
27+
TFormData,
28+
K,
29+
DeepValue<TFormData, K>,
30+
FieldValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
31+
FieldValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
32+
FieldAsyncValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
33+
FieldValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
34+
FieldAsyncValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
35+
FieldValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
36+
FieldAsyncValidateOrFn<TFormData, K, DeepValue<TFormData, K>>,
37+
TOnMount,
38+
TOnChange,
39+
TOnChangeAsync,
40+
TOnBlur,
41+
TOnBlurAsync,
42+
TOnSubmit,
43+
TOnSubmitAsync,
44+
TOnServer,
45+
TSubmitMeta
46+
>,
47+
'form'
48+
> & {
49+
mode?: 'value' | 'array'
50+
}
51+
52+
/**
53+
* Static field options are a way to create field options statically.
54+
* This is useful for creating field options that are not dependent on parameters such as indexes.
55+
*
56+
* @param options - The options for the field.
57+
* @returns The field options.
58+
*/
59+
export function fieldOptions<
60+
TFormData,
61+
TOnMount extends undefined | FormValidateOrFn<TFormData>,
62+
TOnChange extends undefined | FormValidateOrFn<TFormData>,
63+
TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
64+
TOnBlur extends undefined | FormValidateOrFn<TFormData>,
65+
TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
66+
TOnSubmit extends undefined | FormValidateOrFn<TFormData>,
67+
TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
68+
TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,
69+
TSubmitMeta,
70+
K extends DeepKeys<TFormData> = DeepKeys<TFormData>,
71+
>(
72+
options: {
73+
formOptions: FormOptions<
74+
TFormData,
75+
TOnMount,
76+
TOnChange,
77+
TOnChangeAsync,
78+
TOnBlur,
79+
TOnBlurAsync,
80+
TOnSubmit,
81+
TOnSubmitAsync,
82+
TOnServer,
83+
TSubmitMeta
84+
>
85+
} & {
86+
fieldOptions: FieldOptionsExcludingForm<
87+
TFormData,
88+
TOnMount,
89+
TOnChange,
90+
TOnChangeAsync,
91+
TOnBlur,
92+
TOnBlurAsync,
93+
TOnSubmit,
94+
TOnSubmitAsync,
95+
TOnServer,
96+
TSubmitMeta,
97+
K
98+
>
99+
},
100+
): FieldOptionsExcludingForm<
101+
TFormData,
102+
TOnMount,
103+
TOnChange,
104+
TOnChangeAsync,
105+
TOnBlur,
106+
TOnBlurAsync,
107+
TOnSubmit,
108+
TOnSubmitAsync,
109+
TOnServer,
110+
TSubmitMeta,
111+
K
112+
> {
113+
return options.fieldOptions
114+
}
115+
116+
/**
117+
* Dynamic field options are a way to create field options dynamically.
118+
* This is useful for creating field options that are dependent on parameters such as indexes.
119+
*
120+
* @param fn - A function that returns the form options (for type inference) and field options.
121+
* @returns A function that returns the field options.
122+
*/
123+
export function dynamicFieldOptions<
124+
TFormData,
125+
TOnMount extends undefined | FormValidateOrFn<TFormData>,
126+
TOnChange extends undefined | FormValidateOrFn<TFormData>,
127+
TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
128+
TOnBlur extends undefined | FormValidateOrFn<TFormData>,
129+
TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
130+
TOnSubmit extends undefined | FormValidateOrFn<TFormData>,
131+
TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,
132+
TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,
133+
TSubmitMeta,
134+
K extends DeepKeys<TFormData> = DeepKeys<TFormData>,
135+
TParam = any,
136+
>(
137+
fn: (param: TParam) => {
138+
formOptions: FormOptions<
139+
TFormData,
140+
TOnMount,
141+
TOnChange,
142+
TOnChangeAsync,
143+
TOnBlur,
144+
TOnBlurAsync,
145+
TOnSubmit,
146+
TOnSubmitAsync,
147+
TOnServer,
148+
TSubmitMeta
149+
>
150+
} & {
151+
fieldOptions: FieldOptionsExcludingForm<
152+
TFormData,
153+
TOnMount,
154+
TOnChange,
155+
TOnChangeAsync,
156+
TOnBlur,
157+
TOnBlurAsync,
158+
TOnSubmit,
159+
TOnSubmitAsync,
160+
TOnServer,
161+
TSubmitMeta,
162+
K
163+
>
164+
},
165+
): (
166+
param: TParam,
167+
) => FieldOptionsExcludingForm<
168+
TFormData,
169+
TOnMount,
170+
TOnChange,
171+
TOnChangeAsync,
172+
TOnBlur,
173+
TOnBlurAsync,
174+
TOnSubmit,
175+
TOnSubmitAsync,
176+
TOnServer,
177+
TSubmitMeta,
178+
K
179+
> {
180+
return (param: TParam) => fn(param).fieldOptions
181+
}

0 commit comments

Comments
 (0)