@@ -75,30 +75,53 @@ const enum ACTION_TYPE {
75
75
RESET_FORM ,
76
76
}
77
77
78
+ const enum MESSAGE_KEY {
79
+ TYPE = 't' ,
80
+ PAYLOAD = 'p' ,
81
+ }
82
+
78
83
type FormMessage < Values extends FormValues > =
79
- | { type : ACTION_TYPE . SUBMIT_ATTEMPT }
80
- | { type : ACTION_TYPE . SUBMIT_SUCCESS }
81
- | { type : ACTION_TYPE . SUBMIT_FAILURE }
82
- | { type : ACTION_TYPE . SET_VALUES ; payload : Values }
83
- | { type : ACTION_TYPE . SET_FIELD_VALUE ; payload : { path : string ; value : any } }
84
+ | { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_ATTEMPT }
85
+ | { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_SUCCESS }
86
+ | { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_FAILURE }
87
+ | {
88
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_VALUES ;
89
+ [ MESSAGE_KEY . PAYLOAD ] : Values ;
90
+ }
91
+ | {
92
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_FIELD_VALUE ;
93
+ [ MESSAGE_KEY . PAYLOAD ] : { path : string ; value : any } ;
94
+ }
95
+ | {
96
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_TOUCHED ;
97
+ [ MESSAGE_KEY . PAYLOAD ] : { path : string ; touched ?: boolean } ;
98
+ }
99
+ | {
100
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ERRORS ;
101
+ [ MESSAGE_KEY . PAYLOAD ] : FormErrors < Values > ;
102
+ }
103
+ | {
104
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_FIELD_ERROR ;
105
+ [ MESSAGE_KEY . PAYLOAD ] : { path : string ; error : string } ;
106
+ }
84
107
| {
85
- type : ACTION_TYPE . SET_TOUCHED ;
86
- payload : { path : string ; touched ?: boolean } ;
108
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISSUBMITTING ;
109
+ [ MESSAGE_KEY . PAYLOAD ] : boolean ;
87
110
}
88
- | { type : ACTION_TYPE . SET_ERRORS ; payload : FormErrors < Values > }
89
111
| {
90
- type : ACTION_TYPE . SET_FIELD_ERROR ;
91
- payload : { path : string ; error : string } ;
112
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISVALIDATING ;
113
+ [ MESSAGE_KEY . PAYLOAD ] : boolean ;
92
114
}
93
- | { type : ACTION_TYPE . SET_ISSUBMITTING ; payload : boolean }
94
- | { type : ACTION_TYPE . SET_ISVALIDATING ; payload : boolean }
95
- | { type : ACTION_TYPE . RESET_FORM ; payload : FormResetState < Values > } ;
115
+ | {
116
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . RESET_FORM ;
117
+ [ MESSAGE_KEY . PAYLOAD ] : FormResetState < Values > ;
118
+ } ;
96
119
97
120
function reducer < Values extends FormValues > (
98
121
state : FormState < Values > ,
99
122
message : FormMessage < Values > ,
100
123
) {
101
- switch ( message . type ) {
124
+ switch ( message [ MESSAGE_KEY . TYPE ] ) {
102
125
case ACTION_TYPE . SUBMIT_ATTEMPT :
103
126
state . isSubmitting . value = true ;
104
127
state . submitCount . value = state . submitCount . value + 1 ;
@@ -114,37 +137,49 @@ function reducer<Values extends FormValues>(
114
137
delete state . values [ key ] ;
115
138
} ) ;
116
139
117
- keysOf ( message . payload ) . forEach ( ( path ) => {
118
- ( state . values as Values ) [ path ] = message . payload [ path ] ;
140
+ keysOf ( message [ MESSAGE_KEY . PAYLOAD ] ) . forEach ( ( path ) => {
141
+ ( state . values as Values ) [ path ] = message [ MESSAGE_KEY . PAYLOAD ] [ path ] ;
119
142
} ) ;
120
143
return ;
121
144
case ACTION_TYPE . SET_FIELD_VALUE :
122
- set ( state . values , message . payload . path , deepClone ( message . payload . value ) ) ;
145
+ set (
146
+ state . values ,
147
+ message [ MESSAGE_KEY . PAYLOAD ] . path ,
148
+ deepClone ( message [ MESSAGE_KEY . PAYLOAD ] . value ) ,
149
+ ) ;
123
150
return ;
124
151
case ACTION_TYPE . SET_TOUCHED :
125
- set ( state . touched . value , message . payload . path , message . payload . touched ) ;
152
+ set (
153
+ state . touched . value ,
154
+ message [ MESSAGE_KEY . PAYLOAD ] . path ,
155
+ message [ MESSAGE_KEY . PAYLOAD ] . touched ,
156
+ ) ;
126
157
return ;
127
158
case ACTION_TYPE . SET_ERRORS :
128
- state . errors . value = message . payload ;
159
+ state . errors . value = message [ MESSAGE_KEY . PAYLOAD ] ;
129
160
return ;
130
161
case ACTION_TYPE . SET_FIELD_ERROR :
131
- set ( state . errors . value , message . payload . path , message . payload . error ) ;
162
+ set (
163
+ state . errors . value ,
164
+ message [ MESSAGE_KEY . PAYLOAD ] . path ,
165
+ message [ MESSAGE_KEY . PAYLOAD ] . error ,
166
+ ) ;
132
167
return ;
133
168
case ACTION_TYPE . SET_ISSUBMITTING :
134
- state . isSubmitting . value = message . payload ;
169
+ state . isSubmitting . value = message [ MESSAGE_KEY . PAYLOAD ] ;
135
170
return ;
136
171
case ACTION_TYPE . SET_ISVALIDATING :
137
- state . isValidating . value = message . payload ;
172
+ state . isValidating . value = message [ MESSAGE_KEY . PAYLOAD ] ;
138
173
return ;
139
174
case ACTION_TYPE . RESET_FORM :
140
175
reducer ( state , {
141
- type : ACTION_TYPE . SET_VALUES ,
142
- payload : message . payload . values ,
176
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_VALUES ,
177
+ [ MESSAGE_KEY . PAYLOAD ] : message [ MESSAGE_KEY . PAYLOAD ] . values ,
143
178
} ) ;
144
179
145
- state . touched . value = message . payload . touched ;
146
- state . errors . value = message . payload . errors ;
147
- state . submitCount . value = message . payload . submitCount ;
180
+ state . touched . value = message [ MESSAGE_KEY . PAYLOAD ] . touched ;
181
+ state . errors . value = message [ MESSAGE_KEY . PAYLOAD ] . errors ;
182
+ state . submitCount . value = message [ MESSAGE_KEY . PAYLOAD ] . submitCount ;
148
183
}
149
184
}
150
185
@@ -234,8 +269,8 @@ export function useForm<Values extends FormValues = FormValues>(
234
269
235
270
const setFieldTouched = ( name : string , touched = true ) => {
236
271
dispatch ( {
237
- type : ACTION_TYPE . SET_TOUCHED ,
238
- payload : {
272
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_TOUCHED ,
273
+ [ MESSAGE_KEY . PAYLOAD ] : {
239
274
path : name ,
240
275
touched,
241
276
} ,
@@ -248,8 +283,8 @@ export function useForm<Values extends FormValues = FormValues>(
248
283
249
284
const setValues = ( values : Values , shouldValidate ?: boolean ) => {
250
285
dispatch ( {
251
- type : ACTION_TYPE . SET_VALUES ,
252
- payload : values ,
286
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_VALUES ,
287
+ [ MESSAGE_KEY . PAYLOAD ] : values ,
253
288
} ) ;
254
289
255
290
const willValidate =
@@ -268,8 +303,8 @@ export function useForm<Values extends FormValues = FormValues>(
268
303
shouldValidate ?: boolean ,
269
304
) => {
270
305
dispatch ( {
271
- type : ACTION_TYPE . SET_FIELD_VALUE ,
272
- payload : {
306
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_FIELD_VALUE ,
307
+ [ MESSAGE_KEY . PAYLOAD ] : {
273
308
path : name ,
274
309
value,
275
310
} ,
@@ -300,8 +335,8 @@ export function useForm<Values extends FormValues = FormValues>(
300
335
301
336
if ( shouldSetValue ) {
302
337
dispatch ( {
303
- type : ACTION_TYPE . SET_FIELD_ERROR ,
304
- payload : {
338
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_FIELD_ERROR ,
339
+ [ MESSAGE_KEY . PAYLOAD ] : {
305
340
path : name ,
306
341
error,
307
342
} ,
@@ -321,8 +356,8 @@ export function useForm<Values extends FormValues = FormValues>(
321
356
322
357
if ( shouldSetValue ) {
323
358
dispatch ( {
324
- type : ACTION_TYPE . SET_TOUCHED ,
325
- payload : {
359
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_TOUCHED ,
360
+ [ MESSAGE_KEY . PAYLOAD ] : {
326
361
path : name ,
327
362
touched,
328
363
} ,
@@ -363,7 +398,10 @@ export function useForm<Values extends FormValues = FormValues>(
363
398
} ;
364
399
365
400
const setSubmitting = ( isSubmitting : boolean ) => {
366
- dispatch ( { type : ACTION_TYPE . SET_ISSUBMITTING , payload : isSubmitting } ) ;
401
+ dispatch ( {
402
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISSUBMITTING ,
403
+ [ MESSAGE_KEY . PAYLOAD ] : isSubmitting ,
404
+ } ) ;
367
405
} ;
368
406
369
407
const getFieldValue = ( name : MaybeRef < string > ) => {
@@ -455,7 +493,10 @@ export function useForm<Values extends FormValues = FormValues>(
455
493
} ;
456
494
457
495
const runAllValidateHandler = ( values : Values = state . values ) => {
458
- dispatch ( { type : ACTION_TYPE . SET_ISVALIDATING , payload : true } ) ;
496
+ dispatch ( {
497
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISVALIDATING ,
498
+ [ MESSAGE_KEY . PAYLOAD ] : true ,
499
+ } ) ;
459
500
return Promise . all ( [
460
501
runFieldValidateHandler ( values ) ,
461
502
options . validate ? runValidateHandler ( values ) : { } ,
@@ -468,19 +509,25 @@ export function useForm<Values extends FormValues = FormValues>(
468
509
} ,
469
510
) ;
470
511
471
- dispatch ( { type : ACTION_TYPE . SET_ERRORS , payload : errors } ) ;
512
+ dispatch ( {
513
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ERRORS ,
514
+ [ MESSAGE_KEY . PAYLOAD ] : errors ,
515
+ } ) ;
472
516
473
517
return errors ;
474
518
} )
475
519
. finally ( ( ) => {
476
- dispatch ( { type : ACTION_TYPE . SET_ISVALIDATING , payload : false } ) ;
520
+ dispatch ( {
521
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISVALIDATING ,
522
+ [ MESSAGE_KEY . PAYLOAD ] : false ,
523
+ } ) ;
477
524
} ) ;
478
525
} ;
479
526
480
527
const handleSubmit = ( event ?: Event ) => {
481
528
event ?. preventDefault ( ) ;
482
529
483
- dispatch ( { type : ACTION_TYPE . SUBMIT_ATTEMPT } ) ;
530
+ dispatch ( { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_ATTEMPT } ) ;
484
531
485
532
runAllValidateHandler ( ) . then ( ( errors ) => {
486
533
const isValid = keysOf ( errors ) . length === 0 ;
@@ -493,14 +540,14 @@ export function useForm<Values extends FormValues = FormValues>(
493
540
494
541
maybePromise
495
542
. then ( ( result ) => {
496
- dispatch ( { type : ACTION_TYPE . SUBMIT_SUCCESS } ) ;
543
+ dispatch ( { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_SUCCESS } ) ;
497
544
return result ;
498
545
} )
499
546
. catch ( ( ) => {
500
- dispatch ( { type : ACTION_TYPE . SUBMIT_FAILURE } ) ;
547
+ dispatch ( { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_FAILURE } ) ;
501
548
} ) ;
502
549
} else {
503
- dispatch ( { type : ACTION_TYPE . SUBMIT_FAILURE } ) ;
550
+ dispatch ( { [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SUBMIT_FAILURE } ) ;
504
551
onInvalid ?.( errors ) ;
505
552
}
506
553
} ) ;
@@ -516,8 +563,8 @@ export function useForm<Values extends FormValues = FormValues>(
516
563
initialTouched = deepClone ( touched ) ;
517
564
518
565
dispatch ( {
519
- type : ACTION_TYPE . RESET_FORM ,
520
- payload : {
566
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . RESET_FORM ,
567
+ [ MESSAGE_KEY . PAYLOAD ] : {
521
568
values,
522
569
touched,
523
570
errors,
@@ -552,16 +599,22 @@ export function useForm<Values extends FormValues = FormValues>(
552
599
553
600
const validateField : ValidateField < Values > = ( name ) => {
554
601
if ( fieldRegistry [ name ] && isFunction ( fieldRegistry [ name ] . validate ) ) {
555
- dispatch ( { type : ACTION_TYPE . SET_ISVALIDATING , payload : true } ) ;
602
+ dispatch ( {
603
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISVALIDATING ,
604
+ [ MESSAGE_KEY . PAYLOAD ] : true ,
605
+ } ) ;
556
606
return runSingleFieldValidateHandler ( name , get ( state . values , name ) )
557
607
. then ( ( error ) => {
558
608
dispatch ( {
559
- type : ACTION_TYPE . SET_FIELD_ERROR ,
560
- payload : { path : name , error } ,
609
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_FIELD_ERROR ,
610
+ [ MESSAGE_KEY . PAYLOAD ] : { path : name , error } ,
561
611
} ) ;
562
612
} )
563
613
. finally ( ( ) => {
564
- dispatch ( { type : ACTION_TYPE . SET_ISVALIDATING , payload : false } ) ;
614
+ dispatch ( {
615
+ [ MESSAGE_KEY . TYPE ] : ACTION_TYPE . SET_ISVALIDATING ,
616
+ [ MESSAGE_KEY . PAYLOAD ] : false ,
617
+ } ) ;
565
618
} ) ;
566
619
}
567
620
return Promise . resolve ( ) ;
0 commit comments