@@ -20,6 +20,10 @@ const basicArraySchema = z.object({
20
20
array : z . array ( z . string ( ) ) ,
21
21
} )
22
22
23
+ const basic2DArraySchema = z . object ( {
24
+ array : z . array ( z . array ( z . string ( ) ) ) ,
25
+ } )
26
+
23
27
const objectArraySchema = z . object ( {
24
28
array : z . array (
25
29
z . object ( {
@@ -234,6 +238,92 @@ describe('useForm', () => {
234
238
] ,
235
239
} )
236
240
} )
241
+
242
+ it ( 'should register a field as a fieldArray' , ( ) => {
243
+ const { form } = useForm ( {
244
+ schema : basicArraySchema ,
245
+ } )
246
+
247
+ const arrayAsField = form . register ( 'array' , [ 'John' ] )
248
+ const arrayAsArray = form . registerArray ( 'array' )
249
+
250
+ expect ( form . state ) . toEqual ( {
251
+ array : [ 'John' ] ,
252
+ } )
253
+
254
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'John' ] )
255
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'John' ] )
256
+
257
+ arrayAsField . setValue ( [ 'Doe' ] )
258
+
259
+ expect ( form . state ) . toEqual ( {
260
+ array : [ 'Doe' ] ,
261
+ } )
262
+
263
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'Doe' ] )
264
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'Doe' ] )
265
+
266
+ arrayAsArray . append ( 'John' )
267
+
268
+ expect ( form . state ) . toEqual ( {
269
+ array : [ 'Doe' , 'John' ] ,
270
+ } )
271
+
272
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'Doe' , 'John' ] )
273
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'Doe' , 'John' ] )
274
+ } )
275
+
276
+ it ( 'should register a fieldArray as a field' , ( ) => {
277
+ const { form } = useForm ( {
278
+ schema : basicArraySchema ,
279
+ } )
280
+
281
+ const arrayAsArray = form . registerArray ( 'array' , [ 'John' ] )
282
+ const arrayAsField = form . register ( 'array' )
283
+
284
+ expect ( form . state ) . toEqual ( {
285
+ array : [ 'John' ] ,
286
+ } )
287
+
288
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'John' ] )
289
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'John' ] )
290
+
291
+ arrayAsField . setValue ( [ 'Doe' ] )
292
+
293
+ expect ( form . state ) . toEqual ( {
294
+ array : [ 'Doe' ] ,
295
+ } )
296
+
297
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'Doe' ] )
298
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'Doe' ] )
299
+
300
+ arrayAsArray . append ( 'John' )
301
+
302
+ expect ( form . state ) . toEqual ( {
303
+ array : [ 'Doe' , 'John' ] ,
304
+ } )
305
+
306
+ expect ( arrayAsField . modelValue ) . toEqual ( [ 'Doe' , 'John' ] )
307
+ expect ( arrayAsArray . modelValue ) . toEqual ( [ 'Doe' , 'John' ] )
308
+ } )
309
+
310
+ it ( 'should register a 2D array field with a default value' , ( ) => {
311
+ const { form } = useForm ( {
312
+ schema : basic2DArraySchema ,
313
+ } )
314
+
315
+ const array = form . registerArray ( 'array' , [ [ ] ] )
316
+
317
+ expect ( array . modelValue ) . toEqual ( [ [ ] ] )
318
+
319
+ expect ( form . state ) . toEqual ( {
320
+ array : [ [ ] ] ,
321
+ } )
322
+
323
+ array . register ( '0' , [ 'John' ] )
324
+
325
+ expect ( array . modelValue ) . toEqual ( [ [ 'John' ] ] )
326
+ } )
237
327
} )
238
328
239
329
describe ( 'unregister a field or fieldArray' , ( ) => {
@@ -436,6 +526,8 @@ describe('useForm', () => {
436
526
437
527
const array = form . registerArray ( 'array' )
438
528
529
+ array . register ( '0' )
530
+
439
531
array . remove ( 1 )
440
532
441
533
expect ( form . state ) . toEqual ( {
@@ -873,6 +965,25 @@ describe('useForm', () => {
873
965
874
966
expect ( submitted ) . toEqual ( false )
875
967
} )
968
+
969
+ it ( 'should call `onSubmitError` if there are errors' , async ( ) => {
970
+ let isCalled = false
971
+
972
+ const { form, onSubmitFormError } = useForm ( {
973
+ schema : basicSchema ,
974
+ } )
975
+
976
+ onSubmitFormError ( ( ) => {
977
+ isCalled = true
978
+ } )
979
+
980
+ form . register ( 'name' , 'Jon' )
981
+
982
+ await sleep ( 0 )
983
+ await form . submit ( )
984
+
985
+ expect ( isCalled ) . toEqual ( true )
986
+ } )
876
987
} )
877
988
878
989
describe ( 'reactive initial state' , ( ) => {
0 commit comments