33
44import { createContext , useContext , useEffect , useState } from 'react' ;
55import { flushSync } from 'react-dom' ;
6- import type { AllPaths , AllPathsKeys , DeepPartial , PathToDeepType , ShapeFromPaths } from 'skyroc-type-utils' ;
6+ import type { AllPathsKeys , DeepPartial , PathToDeepType , ShapeFromPaths } from 'skyroc-type-utils' ;
77import { isArray , toArray } from 'skyroc-utils' ;
88
99import type { ChangeMask , SubscribeMaskOptions } from './form-core/event' ;
@@ -16,25 +16,27 @@ import type { FormState } from './types';
1616import type { Meta } from './types/shared-types' ;
1717
1818export interface ValuesOptions < Values = any > {
19- getFieldsValue : < K extends AllPaths < Values , number > [ ] > ( name ?: K ) => ShapeFromPaths < Values , K > ;
20- getFieldValue : < T extends AllPaths < Values > > ( name : T ) => PathToDeepType < Values , T > ;
19+ getFieldsValue : < K extends AllPathsKeys < Values > [ ] > ( name ?: K ) => ShapeFromPaths < Values , K > ;
20+ getFieldValue : < T extends AllPathsKeys < Values > > ( name : T ) => PathToDeepType < Values , T > ;
2121 setFieldsValue : ( values : DeepPartial < Values > ) => void ;
22- setFieldValue : < T extends AllPaths < Values > > ( name : T , value : PathToDeepType < Values , T > ) => void ;
22+ setFieldValue : < T extends AllPathsKeys < Values > > ( name : T , value : PathToDeepType < Values , T > ) => void ;
2323}
2424
2525export interface StateOptions < Values = any > {
26- getField : < T extends AllPaths < Values > > ( name : T ) => Meta < T , PathToDeepType < Values , T > > ;
27- getFieldError : ( name : AllPaths < Values > ) => string [ ] ;
28- getFields : ( names ?: AllPaths < Values > [ ] ) => Meta < AllPaths < Values > , PathToDeepType < Values , AllPaths < Values > > > [ ] ;
29- getFieldsError : ( ...name : AllPaths < Values > [ ] ) => Record < AllPaths < Values > , string [ ] > ;
30- getFieldsTouched : ( ...name : AllPaths < Values > [ ] ) => boolean ;
31- getFieldsValidated : ( ...name : AllPaths < Values > [ ] ) => boolean ;
32- getFieldsValidating : ( ...name : AllPaths < Values > [ ] ) => boolean ;
33- getFieldsWarning : ( ...name : AllPaths < Values > [ ] ) => Record < AllPaths < Values > , string [ ] > ;
34- getFieldTouched : ( name : AllPaths < Values > ) => boolean ;
35- getFieldValidated : ( name : AllPaths < Values > ) => boolean ;
36- getFieldValidating : ( name : AllPaths < Values > ) => boolean ;
37- getFieldWarning : ( name : AllPaths < Values > ) => string [ ] ;
26+ getField : < T extends AllPathsKeys < Values > > ( name : T ) => Meta < T , PathToDeepType < Values , T > > ;
27+ getFieldError : ( name : AllPathsKeys < Values > ) => string [ ] ;
28+ getFields : (
29+ names ?: AllPathsKeys < Values > [ ]
30+ ) => Meta < AllPathsKeys < Values > , PathToDeepType < Values , AllPathsKeys < Values > > > [ ] ;
31+ getFieldsError : ( ...name : AllPathsKeys < Values > [ ] ) => Record < AllPathsKeys < Values > , string [ ] > ;
32+ getFieldsTouched : ( ...name : AllPathsKeys < Values > [ ] ) => boolean ;
33+ getFieldsValidated : ( ...name : AllPathsKeys < Values > [ ] ) => boolean ;
34+ getFieldsValidating : ( ...name : AllPathsKeys < Values > [ ] ) => boolean ;
35+ getFieldsWarning : ( ...name : AllPathsKeys < Values > [ ] ) => Record < AllPathsKeys < Values > , string [ ] > ;
36+ getFieldTouched : ( name : AllPathsKeys < Values > ) => boolean ;
37+ getFieldValidated : ( name : AllPathsKeys < Values > ) => boolean ;
38+ getFieldValidating : ( name : AllPathsKeys < Values > ) => boolean ;
39+ getFieldWarning : ( name : AllPathsKeys < Values > ) => string [ ] ;
3840 getFormState : ( ) => FormState ;
3941}
4042
@@ -43,11 +45,11 @@ export interface ValidateFieldsOptions extends ValidateOptions {
4345}
4446
4547export interface OperationOptions < Values = any > {
46- resetFields : ( names ?: AllPaths < Values > [ ] ) => void ;
48+ resetFields : ( names ?: AllPathsKeys < Values > [ ] ) => void ;
4749 submit : ( ) => void ;
4850 use : ( mw : Middleware ) => void ;
49- validateField : ( name : AllPaths < Values > ) => Promise < boolean > ;
50- validateFields : ( names ?: AllPaths < Values > [ ] , opts ?: ValidateFieldsOptions ) => Promise < boolean > ;
51+ validateField : ( name : AllPathsKeys < Values > ) => Promise < boolean > ;
52+ validateFields : ( names ?: AllPathsKeys < Values > [ ] , opts ?: ValidateFieldsOptions ) => Promise < boolean > ;
5153}
5254
5355export interface ValidateErrorEntity < Values = any > {
@@ -63,8 +65,8 @@ export interface ValidateErrorEntity<Values = any> {
6365
6466export interface RegisterCallbackOptions < Values = any > {
6567 onFieldsChange ?: (
66- changedFields : Meta < AllPaths < Values > , PathToDeepType < Values , AllPaths < Values > > > [ ] ,
67- allFields : Meta < AllPaths < Values > , PathToDeepType < Values , AllPaths < Values > > > [ ]
68+ changedFields : Meta < AllPathsKeys < Values > , PathToDeepType < Values , AllPathsKeys < Values > > > [ ] ,
69+ allFields : Meta < AllPathsKeys < Values > , PathToDeepType < Values , AllPathsKeys < Values > > > [ ]
6870 ) => void ;
6971
7072 onFinish ?: ( values : Values ) => void ;
@@ -84,17 +86,22 @@ export interface InternalCallbacks<Values = any> {
8486
8587export interface InternalFieldHooks < Values = any > {
8688 dispatch : ( action : Action ) => void ;
87- getInitialValue : < T extends AllPaths < Values > > ( name : T ) => PathToDeepType < Values , T > ;
89+ getInitialValue : < T extends AllPathsKeys < Values > > ( name : T ) => PathToDeepType < Values , T > ;
90+ registerComputed : < T extends AllPathsKeys < Values > > (
91+ name : T ,
92+ deps : AllPathsKeys < Values > [ ] ,
93+ compute : ( get : ( n : AllPathsKeys < Values > ) => any , all : Values ) => PathToDeepType < Values , T >
94+ ) => ( ) => void ;
8895 registerField : ( entity : FieldEntity ) => ( ) => void ;
89- setFieldRules : ( name : AllPaths < Values > , rules ?: Rule [ ] ) => void ;
90- setRules : ( name : AllPaths < Values > , rules ?: Rule [ ] ) => void ;
91- subscribeField : (
92- name : AllPaths < Values > ,
93- cb : ( ) => void ,
96+ setFieldRules : ( name : AllPathsKeys < Values > , rules ?: Rule [ ] ) => void ;
97+ setRules : ( name : AllPathsKeys < Values > , rules ?: Rule [ ] ) => void ;
98+ subscribeField : < T extends AllPathsKeys < Values > > (
99+ name : T ,
100+ cb : ( value : PathToDeepType < Values , T > , name : T , values : Values , mask : ChangeMask ) => void ,
94101 opt ?: { includeChildren ?: boolean ; mask ?: ChangeMask }
95102 ) => ( ) => void ;
96103 subscribeFields : (
97- names : AllPaths < Values > [ ] ,
104+ names : AllPathsKeys < Values > [ ] ,
98105 cb : ( ) => void ,
99106 opt ?: { includeChildren ?: boolean ; mask ?: ChangeMask }
100107 ) => ( ) => void ;
@@ -131,7 +138,7 @@ export const useFieldContext = <Values = any>(): InternalFormContext<Values> =>
131138} ;
132139
133140export const useFieldState = < Values = any > (
134- name : AllPaths < Values > ,
141+ name : AllPathsKeys < Values > ,
135142 mask : SubscribeMaskOptions = {
136143 errors : true ,
137144 touched : true ,
@@ -177,7 +184,7 @@ export const useFieldState = <Values = any>(
177184
178185export const useFieldsState = < Values = any > (
179186 form : FormInstance < Values > ,
180- names : AllPaths < Values > [ ] ,
187+ names : AllPathsKeys < Values > [ ] ,
181188 opts ?: {
182189 includeChildren ?: boolean ;
183190 mask ?: SubscribeMaskOptions ;
@@ -205,7 +212,7 @@ export const useFieldsState = <Values = any>(
205212
206213 useEffect ( ( ) => {
207214 const unregister = subscribeFields (
208- names . length ? names : ( [ '' ] as AllPaths < Values > [ ] ) ,
215+ names . length ? names : ( [ '' ] as AllPathsKeys < Values > [ ] ) ,
209216 ( ) => {
210217 flushSync ( ( ) => {
211218 forceUpdate ( { } ) ;
@@ -224,27 +231,27 @@ export const useFieldsState = <Values = any>(
224231 return state ;
225232} ;
226233
227- export const useFieldError = < Values = any > ( name : AllPaths < Values > ) => {
234+ export const useFieldError = < Values = any > ( name : AllPathsKeys < Values > ) => {
228235 const state = useFieldState < Values > ( name , { errors : true } ) ;
229236
230237 return state . errors ;
231238} ;
232239
233240export const useFieldErrors = < Values = any > (
234241 form : FormInstance < Values > ,
235- names : AllPaths < Values > [ ] = [ ]
236- ) : Record < AllPaths < Values > , string [ ] > => {
242+ names : AllPathsKeys < Values > [ ] = [ ]
243+ ) : Record < AllPathsKeys < Values > , string [ ] > => {
237244 const state = useFieldsState < Values > ( form , names , { mask : { errors : true } } ) ;
238245
239246 const errors = state . reduce (
240247 ( acc , field ) => {
241248 acc [ field . name ] = field . errors ;
242249 return acc ;
243250 } ,
244- { } as Record < AllPaths < Values > , string [ ] >
251+ { } as Record < AllPathsKeys < Values > , string [ ] >
245252 ) ;
246253
247- return errors as Record < AllPaths < Values > , string [ ] > ;
254+ return errors as Record < AllPathsKeys < Values > , string [ ] > ;
248255} ;
249256
250257function useWatch < Values , T extends AllPathsKeys < Values > > (
@@ -253,18 +260,18 @@ function useWatch<Values, T extends AllPathsKeys<Values>>(
253260 includeChildren ?: boolean
254261) : PathToDeepType < Values , T > ;
255262
256- function useWatch < Values , const T extends AllPaths < Values > [ ] > (
263+ function useWatch < Values , const T extends AllPathsKeys < Values > [ ] > (
257264 form : FormInstance < Values > ,
258265 names : T
259266) : ShapeFromPaths < Values , T > ;
260267
261- function useWatch < Values = any , const T extends AllPaths < Values > [ ] = AllPaths < Values > [ ] > (
268+ function useWatch < Values = any , const T extends AllPathsKeys < Values > [ ] = AllPathsKeys < Values > [ ] > (
262269 form : FormInstance < Values >
263270) : ShapeFromPaths < Values , T > ;
264271
265272function useWatch < Values = any > (
266273 form : FormInstance < Values > ,
267- names ?: AllPaths < Values > [ ] | AllPaths < Values > ,
274+ names ?: AllPathsKeys < Values > [ ] | AllPathsKeys < Values > ,
268275 includeChildren ?: boolean
269276) {
270277 const namesArray = names ? toArray ( names ) : [ ] ;
0 commit comments