@@ -479,4 +479,89 @@ describe('table row select', () => {
479
479
expect ( $rows . is ( '[tabindex="0"]' ) ) . toBe ( true )
480
480
expect ( $rows . is ( '[aria-selected="false"]' ) ) . toBe ( true )
481
481
} )
482
+
483
+ it ( 'change in select mode clears selection' , async ( ) => {
484
+ const wrapper = mount ( Table , {
485
+ propsData : {
486
+ fields : testFields ,
487
+ items : testItems ,
488
+ selectable : true ,
489
+ selectMode : 'single'
490
+ }
491
+ } )
492
+ let $rows
493
+ expect ( wrapper ) . toBeDefined ( )
494
+ await wrapper . vm . $nextTick ( )
495
+ expect ( wrapper . emitted ( 'row-selected' ) ) . not . toBeDefined ( )
496
+
497
+ // Click first row
498
+ wrapper
499
+ . findAll ( 'tbody > tr' )
500
+ . at ( 0 )
501
+ . trigger ( 'click' )
502
+ await wrapper . vm . $nextTick ( )
503
+ expect ( wrapper . emitted ( 'row-selected' ) ) . toBeDefined ( )
504
+ expect ( wrapper . emitted ( 'row-selected' ) . length ) . toBe ( 1 )
505
+ expect ( wrapper . emitted ( 'row-selected' ) [ 0 ] [ 0 ] ) . toEqual ( [ testItems [ 0 ] ] )
506
+ $rows = wrapper . findAll ( 'tbody > tr' )
507
+ expect ( $rows . is ( '[tabindex="0"]' ) ) . toBe ( true )
508
+ expect ( $rows . at ( 0 ) . is ( '[aria-selected="true"]' ) ) . toBe ( true )
509
+ expect ( $rows . at ( 1 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
510
+ expect ( $rows . at ( 2 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
511
+ expect ( $rows . at ( 3 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
512
+
513
+ // Change mode
514
+ wrapper . setProps ( {
515
+ selectMode : 'range'
516
+ } )
517
+ await wrapper . vm . $nextTick ( )
518
+ expect ( wrapper . emitted ( 'row-selected' ) ) . toBeDefined ( )
519
+ expect ( wrapper . emitted ( 'row-selected' ) . length ) . toBe ( 1 )
520
+ expect ( wrapper . emitted ( 'row-selected' ) [ 0 ] [ 0 ] ) . toEqual ( [ ] )
521
+ $rows = wrapper . findAll ( 'tbody > tr' )
522
+ expect ( $rows . is ( '[tabindex="0"]' ) ) . toBe ( true )
523
+ expect ( $rows . is ( '[aria-selected="false"]' ) ) . toBe ( true )
524
+ } )
525
+
526
+ it ( 'disabling selctable clears selection' , async ( ) => {
527
+ const wrapper = mount ( Table , {
528
+ propsData : {
529
+ fields : testFields ,
530
+ items : testItems ,
531
+ selectable : true ,
532
+ selectMode : 'single'
533
+ }
534
+ } )
535
+ let $rows
536
+ expect ( wrapper ) . toBeDefined ( )
537
+ await wrapper . vm . $nextTick ( )
538
+ expect ( wrapper . emitted ( 'row-selected' ) ) . not . toBeDefined ( )
539
+
540
+ // Click first row
541
+ wrapper
542
+ . findAll ( 'tbody > tr' )
543
+ . at ( 0 )
544
+ . trigger ( 'click' )
545
+ await wrapper . vm . $nextTick ( )
546
+ expect ( wrapper . emitted ( 'row-selected' ) ) . toBeDefined ( )
547
+ expect ( wrapper . emitted ( 'row-selected' ) . length ) . toBe ( 1 )
548
+ expect ( wrapper . emitted ( 'row-selected' ) [ 0 ] [ 0 ] ) . toEqual ( [ testItems [ 0 ] ] )
549
+ $rows = wrapper . findAll ( 'tbody > tr' )
550
+ expect ( $rows . is ( '[tabindex="0"]' ) ) . toBe ( true )
551
+ expect ( $rows . at ( 0 ) . is ( '[aria-selected="true"]' ) ) . toBe ( true )
552
+ expect ( $rows . at ( 1 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
553
+ expect ( $rows . at ( 2 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
554
+ expect ( $rows . at ( 3 ) . is ( '[aria-selected="false"]' ) ) . toBe ( true )
555
+
556
+ // Disabled selectable
557
+ wrapper . setProps ( {
558
+ selctable : false
559
+ } )
560
+ await wrapper . vm . $nextTick ( )
561
+ // Does not emit a row-selected event
562
+ expect ( wrapper . emitted ( 'row-selected' ) . length ) . toBe ( 1 )
563
+ $rows = wrapper . findAll ( 'tbody > tr' )
564
+ expect ( $rows . is ( '[tabindex]' ) ) . toBe ( false )
565
+ expect ( $rows . is ( '[aria-selected' ) ) . toBe ( false )
566
+ } )
482
567
} )
0 commit comments