11import { defineComponent , h , onMounted , provide , ref , RendererElement , Transition } from 'vue'
22
3+ import { executeAfterTransition } from './../../utils/transition'
4+
35import { Color } from '../props'
46
57const CToast = defineComponent ( {
@@ -79,29 +81,31 @@ const CToast = defineComponent({
7981 }
8082 provide ( 'updateVisible' , updateVisible )
8183
84+ const handleBeforeEnter = ( el : RendererElement ) => {
85+ el . classList . add ( 'showing' )
86+ }
87+
8288 const handleEnter = ( el : RendererElement , done : ( ) => void ) => {
83- el . addEventListener ( 'transitionend' , ( ) => {
84- done ( )
85- } )
89+ executeAfterTransition ( ( ) => done ( ) , el as HTMLElement )
90+ el . classList . add ( 'show' )
8691 setTimeout ( ( ) => {
87- el . classList . add ( 'show ')
92+ el . classList . remove ( 'showing ')
8893 } , 1 )
94+
8995 if ( props . index ) {
9096 emit ( 'show' , props . index )
9197 } else {
9298 emit ( 'show' )
9399 }
94100 }
95- const handleBeforeLeave = ( el : RendererElement ) => {
96- el . classList . remove ( 'show' )
97- }
101+
98102 const handleLeave = ( el : RendererElement , done : ( ) => void ) => {
99- el . addEventListener ( 'transitionend' , ( ) => {
100- done ( )
101- } )
102- el . classList . remove ( 'show' )
103+ executeAfterTransition ( ( ) => done ( ) , el as HTMLElement )
104+ el . classList . add ( 'showing' )
103105 }
106+
104107 const handleAfterLeave = ( el : RendererElement ) => {
108+ el . classList . remove ( 'show' )
105109 el . classList . add ( 'hide' )
106110 if ( props . index ) {
107111 emit ( 'close' , props . index )
@@ -125,8 +129,8 @@ const CToast = defineComponent({
125129 Transition ,
126130 {
127131 appear : true ,
132+ onBeforeEnter : ( el ) => handleBeforeEnter ( el ) ,
128133 onEnter : ( el , done ) => handleEnter ( el , done ) ,
129- onBeforeLeave : ( el ) => handleBeforeLeave ( el ) ,
130134 onLeave : ( el , done ) => handleLeave ( el , done ) ,
131135 onAfterLeave : ( el ) => handleAfterLeave ( el ) ,
132136 } ,
0 commit comments