@@ -21,6 +21,7 @@ import {
2121} from '../block'
2222import { isVaporComponent } from '../component'
2323
24+ /*#__NO_SIDE_EFFECTS__*/
2425export const vaporTransitionImpl : VaporTransitionInterface = {
2526 applyTransition : (
2627 props : TransitionProps ,
@@ -118,31 +119,29 @@ function setTransitionHooks(
118119 block : TransitionBlock ,
119120 hooks : VaporTransitionHooks ,
120121) {
121- if ( ! isFragment ( block ) ) {
122- block . $transition = hooks
123- }
122+ block . $transition = hooks
124123}
125124
126125export function applyTransitionEnterHooks (
127126 block : Block ,
128127 hooks : VaporTransitionHooks ,
129- ) : VaporTransitionHooks | undefined {
130- const child = findElementChild ( block )
131- let enterHooks
132- if ( child ) {
133- const { props, state, delayedLeave } = hooks
134- enterHooks = resolveTransitionHooks (
135- child ,
136- props ,
137- state ,
138- currentInstance ! ,
139- hooks => ( enterHooks = hooks as VaporTransitionHooks ) ,
140- )
141- enterHooks . delayedLeave = delayedLeave
142- setTransitionHooks ( child , enterHooks )
143- if ( isFragment ( block ) ) {
144- block . $ transition = enterHooks
145- }
128+ ) : VaporTransitionHooks {
129+ const child = findTransitionBlock ( block )
130+ if ( ! child ) return hooks
131+
132+ const { props, state, delayedLeave } = hooks
133+ let enterHooks = resolveTransitionHooks (
134+ child ,
135+ props ,
136+ state ,
137+ currentInstance ! ,
138+ hooks => ( enterHooks = hooks as VaporTransitionHooks ) ,
139+ )
140+ enterHooks . delayedLeave = delayedLeave
141+ setTransitionHooks ( child , enterHooks )
142+ if ( isFragment ( block ) ) {
143+ // also set transition hooks on fragment for reusing during it's updating
144+ setTransitionHooks ( block , enterHooks )
146145 }
147146 return enterHooks
148147}
@@ -152,7 +151,7 @@ export function applyTransitionLeaveHooks(
152151 enterHooks : VaporTransitionHooks ,
153152 afterLeaveCb : ( ) => void ,
154153) : void {
155- const leavingBlock = findElementChild ( block )
154+ const leavingBlock = findTransitionBlock ( block )
156155 if ( ! leavingBlock ) return undefined
157156
158157 const { props, state } = enterHooks
@@ -196,23 +195,23 @@ export function applyTransitionLeaveHooks(
196195 }
197196}
198197
199- const transitionChildCache = new WeakMap < Block , TransitionBlock > ( )
200- export function findElementChild ( block : Block ) : TransitionBlock | undefined {
201- if ( transitionChildCache . has ( block ) ) {
202- return transitionChildCache . get ( block )
198+ const transitionBlockCache = new WeakMap < Block , TransitionBlock > ( )
199+ export function findTransitionBlock ( block : Block ) : TransitionBlock | undefined {
200+ if ( transitionBlockCache . has ( block ) ) {
201+ return transitionBlockCache . get ( block )
203202 }
204203
205204 let child : TransitionBlock | undefined
206205 if ( block instanceof Node ) {
207206 // transition can only be applied on Element child
208207 if ( block instanceof Element ) child = block
209208 } else if ( isVaporComponent ( block ) ) {
210- child = findElementChild ( block . block )
209+ child = findTransitionBlock ( block . block )
211210 } else if ( Array . isArray ( block ) ) {
212211 child = block [ 0 ] as TransitionBlock
213212 let hasFound = false
214213 for ( const c of block ) {
215- const item = findElementChild ( c )
214+ const item = findTransitionBlock ( c )
216215 if ( item instanceof Element ) {
217216 if ( __DEV__ && hasFound ) {
218217 // warn more than one non-comment child
@@ -228,7 +227,7 @@ export function findElementChild(block: Block): TransitionBlock | undefined {
228227 }
229228 }
230229 } else if ( isFragment ( block ) ) {
231- child = findElementChild ( block . nodes )
230+ child = findTransitionBlock ( block . nodes )
232231 }
233232
234233 if ( __DEV__ && ! child ) {
@@ -239,7 +238,8 @@ export function findElementChild(block: Block): TransitionBlock | undefined {
239238}
240239
241240let registered = false
242- export function ensureVaporTransition ( ) : void {
241+ /*#__NO_SIDE_EFFECTS__*/
242+ export function useVaporTransition ( ) : void {
243243 if ( ! registered ) {
244244 registerVaporTransition ( vaporTransitionImpl )
245245 registered = true
0 commit comments