File tree 4 files changed +169
-0
lines changed 4 files changed +169
-0
lines changed Original file line number Diff line number Diff line change @@ -363,3 +363,52 @@ describe('TanStackFieldDirective', () => {
363
363
expect ( getByText ( onBlurError ) ) . toBeInTheDocument ( )
364
364
} )
365
365
} )
366
+
367
+ describe ( 'form should reset when rendered correctly - angular' , ( ) => {
368
+ it ( 'should be able to handle async resets' , async ( ) => {
369
+ @Component ( {
370
+ selector : 'test-component' ,
371
+ standalone : true ,
372
+ template : `
373
+ <ng-container [tanstackField]="form" name="name" #f="field">
374
+ <input
375
+ data-testid="fieldinput"
376
+ [value]="f.api.state.value"
377
+ (input)="f.api.handleChange($any($event).target.value)"
378
+ />
379
+ </ng-container>
380
+ <button
381
+ type="button"
382
+ (click)="form.handleSubmit()"
383
+ data-testid="submit"
384
+ >
385
+ submit
386
+ </button>
387
+ ` ,
388
+ imports : [ TanStackField ] ,
389
+ } )
390
+ class TestComponent {
391
+ form = injectForm ( {
392
+ defaultValues : {
393
+ name : '' ,
394
+ } ,
395
+ onSubmit : ( { value } ) => {
396
+ expect ( value ) . toEqual ( { name : 'test' } )
397
+ this . form . reset ( { name : 'test' } )
398
+ } ,
399
+ } )
400
+ }
401
+
402
+ const { getByTestId } = await render ( TestComponent )
403
+
404
+ const input = getByTestId ( 'fieldinput' )
405
+ const submit = getByTestId ( 'submit' )
406
+
407
+ await user . type ( input , 'test' )
408
+ await expect ( input ) . toHaveValue ( 'test' )
409
+
410
+ await user . click ( submit )
411
+
412
+ await expect ( input ) . toHaveValue ( 'test' )
413
+ } )
414
+ } )
Original file line number Diff line number Diff line change @@ -120,6 +120,25 @@ describe('form api', () => {
120
120
} )
121
121
} )
122
122
123
+ it ( 'form should reset when rendered correctly - core' , async ( ) => {
124
+ const defaultValues = {
125
+ name : '' ,
126
+ }
127
+ const form = new FormApi ( {
128
+ defaultValues : defaultValues ,
129
+ onSubmit : ( { value } ) => {
130
+ form . reset ( value )
131
+
132
+ expect ( form . options . defaultValues ) . toMatchObject ( {
133
+ name : 'test' ,
134
+ } )
135
+ } ,
136
+ } )
137
+ form . mount ( )
138
+ form . setFieldValue ( 'name' , 'test' )
139
+ form . handleSubmit ( )
140
+ } )
141
+
123
142
it ( 'should reset and set the new default values that are restored after an empty reset' , ( ) => {
124
143
const form = new FormApi ( { defaultValues : { name : 'initial' } } )
125
144
form . mount ( )
Original file line number Diff line number Diff line change @@ -795,3 +795,53 @@ describe('useForm', () => {
795
795
expect ( fn ) . toHaveBeenCalledTimes ( 1 )
796
796
} )
797
797
} )
798
+
799
+ it ( 'form should reset when rendered correctly - react' , async ( ) => {
800
+ function Comp ( ) {
801
+ const form = useForm ( {
802
+ defaultValues : {
803
+ name : '' ,
804
+ } ,
805
+ onSubmit : ( { value } ) => {
806
+ expect ( value ) . toEqual ( { name : 'test' } )
807
+
808
+ form . reset ( { name : 'test' } )
809
+ } ,
810
+ } )
811
+
812
+ return (
813
+ < div >
814
+ < form . Field
815
+ name = "name"
816
+ children = { ( field ) => (
817
+ < input
818
+ data-testid = "fieldinput"
819
+ name = { field . name }
820
+ value = { field . state . value }
821
+ onChange = { ( e ) => field . handleChange ( e . target . value ) }
822
+ />
823
+ ) }
824
+ />
825
+
826
+ < button
827
+ type = "button"
828
+ onClick = { ( ) => form . handleSubmit ( ) }
829
+ data-testid = "submit"
830
+ >
831
+ submit
832
+ </ button >
833
+ </ div >
834
+ )
835
+ }
836
+
837
+ const { getByTestId } = render ( < Comp /> )
838
+ const input = getByTestId ( 'fieldinput' )
839
+ const submit = getByTestId ( 'submit' )
840
+
841
+ await user . type ( input , 'test' )
842
+ await waitFor ( ( ) => expect ( input ) . toHaveValue ( 'test' ) )
843
+
844
+ await user . click ( submit )
845
+
846
+ await waitFor ( ( ) => expect ( input ) . toHaveValue ( 'test' ) )
847
+ } )
Original file line number Diff line number Diff line change @@ -476,4 +476,55 @@ describe('useForm', () => {
476
476
await waitFor ( ( ) => getByText ( error ) )
477
477
expect ( getByText ( error ) ) . toBeInTheDocument ( )
478
478
} )
479
+
480
+ it ( 'form should reset when rendered correctly - vue' , async ( ) => {
481
+ const Comp = defineComponent ( ( ) => {
482
+ const form = useForm ( {
483
+ defaultValues : {
484
+ name : '' ,
485
+ } ,
486
+ onSubmit : ( { value } ) => {
487
+ expect ( value ) . toEqual ( { name : 'test' } )
488
+
489
+ form . reset ( { name : 'test' } )
490
+ } ,
491
+ } )
492
+
493
+ return ( ) => (
494
+ < div >
495
+ < form . Field name = "name" >
496
+ { ( { field } : { field : AnyFieldApi } ) => (
497
+ < input
498
+ data-testid = "fieldinput"
499
+ name = { field . name }
500
+ value = { field . state . value }
501
+ onInput = { ( e ) =>
502
+ field . handleChange ( ( e . target as HTMLInputElement ) . value )
503
+ }
504
+ />
505
+ ) }
506
+ </ form . Field >
507
+
508
+ < button
509
+ type = "button"
510
+ onClick = { ( ) => form . handleSubmit ( ) }
511
+ data-testid = "submit"
512
+ >
513
+ submit
514
+ </ button >
515
+ </ div >
516
+ )
517
+ } )
518
+
519
+ const { getByTestId } = render ( < Comp /> )
520
+ const input = getByTestId ( 'fieldinput' )
521
+ const submit = getByTestId ( 'submit' )
522
+
523
+ await user . type ( input , 'test' )
524
+ await waitFor ( ( ) => expect ( input ) . toHaveValue ( 'test' ) )
525
+
526
+ await user . click ( submit )
527
+
528
+ await waitFor ( ( ) => expect ( input ) . toHaveValue ( 'test' ) )
529
+ } )
479
530
} )
You can’t perform that action at this time.
0 commit comments