@@ -500,4 +500,146 @@ module('Integration | Component | transition group', function (hooks) {
500
500
. dom ( '#my-element' )
501
501
. exists ( { count : 1 } , 'child element is still rendered' ) ;
502
502
} ) ;
503
+
504
+ module ( 'Always call didTransitionOut' , function ( ) {
505
+ let testCases = [
506
+ {
507
+ name : 'element' ,
508
+ template : hbs `
509
+ <style>
510
+ .window-enter,
511
+ .window-leave-to {
512
+ opacity: 0;
513
+ transform: scale(0.9);
514
+ }
515
+
516
+ .window-enter-active,
517
+ .window-leave-active {
518
+ transition: opacity 0.5s ease, transform 0.5s ease;
519
+ }
520
+
521
+ .window-enter-to,
522
+ .window-leave {
523
+ opacity: 1;
524
+ transform: scale(1);
525
+ }
526
+ </style>
527
+
528
+ {{#if this.show}}
529
+ <div id="my-element" {{css-transition
530
+ enterClass="window-enter"
531
+ enterActiveClass="window-enter-active"
532
+ enterToClass="window-enter-to"
533
+ leaveClass="window-leave"
534
+ leaveActiveClass="window-leave-active"
535
+ leaveToClass="window-leave-to"
536
+ didTransitionOut=this.didTransitionOut
537
+ }}>
538
+ <p class="content">Çup?</p>
539
+ </div>
540
+ {{/if}}
541
+ ` ,
542
+ } ,
543
+ {
544
+ name : 'classic component' ,
545
+ template : hbs `
546
+ <style>
547
+ .window-enter,
548
+ .window-leave-to {
549
+ opacity: 0;
550
+ transform: scale(0.9);
551
+ }
552
+
553
+ .window-enter-active,
554
+ .window-leave-active {
555
+ transition: opacity 0.5s ease, transform 0.5s ease;
556
+ }
557
+
558
+ .window-enter-to,
559
+ .window-leave {
560
+ opacity: 1;
561
+ transform: scale(1);
562
+ }
563
+ </style>
564
+
565
+ {{#if this.show}}
566
+ <MyComponent id="my-element" {{css-transition
567
+ enterClass="window-enter"
568
+ enterActiveClass="window-enter-active"
569
+ enterToClass="window-enter-to"
570
+ leaveClass="window-leave"
571
+ leaveActiveClass="window-leave-active"
572
+ leaveToClass="window-leave-to"
573
+ didTransitionOut=this.didTransitionOut
574
+ }}>
575
+ <p class="content">Çup?</p>
576
+ </MyComponent>
577
+ {{/if}}
578
+ ` ,
579
+ } ,
580
+ {
581
+ name : 'glimmer component' ,
582
+ template : hbs `
583
+ <style>
584
+ .window-enter,
585
+ .window-leave-to {
586
+ opacity: 0;
587
+ transform: scale(0.9);
588
+ }
589
+
590
+ .window-enter-active,
591
+ .window-leave-active {
592
+ transition: opacity 0.5s ease, transform 0.5s ease;
593
+ }
594
+
595
+ .window-enter-to,
596
+ .window-leave {
597
+ opacity: 1;
598
+ transform: scale(1);
599
+ }
600
+ </style>
601
+
602
+ {{#if this.show}}
603
+ <GlimmerComponent id="my-element" {{css-transition
604
+ enterClass="window-enter"
605
+ enterActiveClass="window-enter-active"
606
+ enterToClass="window-enter-to"
607
+ leaveClass="window-leave"
608
+ leaveActiveClass="window-leave-active"
609
+ leaveToClass="window-leave-to"
610
+ didTransitionOut=this.didTransitionOut
611
+ }}>
612
+ <p class="content">Çup?</p>
613
+ </GlimmerComponent>
614
+ {{/if}}
615
+ ` ,
616
+ } ,
617
+ ] ;
618
+
619
+ testCases . forEach ( ( i ) => {
620
+ test ( `didTransitionOut is called for (${ i . name } )` , async function ( assert ) {
621
+ this . didTransitionOut = ( ) => {
622
+ assert . step ( 'transition-out' ) ;
623
+ } ;
624
+
625
+ this . set ( 'show' , false ) ;
626
+
627
+ await render ( i . template ) ;
628
+
629
+ this . set ( 'show' , true ) ;
630
+
631
+ await new Promise ( ( resolve ) => {
632
+ setTimeout ( resolve , 1 ) ;
633
+ } ) ;
634
+
635
+ this . set ( 'show' , false ) ;
636
+
637
+ await new Promise ( ( resolve ) => {
638
+ setTimeout ( resolve , 2000 ) ;
639
+ } ) ;
640
+
641
+ assert . verifySteps ( [ 'transition-out' ] ) ;
642
+ } ) ;
643
+ } ) ;
644
+ } ) ;
503
645
} ) ;
0 commit comments