isLastInsertion,
resetInsertionState,
} from './insertionState'
-import { triggerTransitionGroupUpdate } from './components/TransitionGroup'
class ForBlock extends VaporFragment {
scope: EffectScope | undefined
newBlocks = new Array(newLength)
let isFallback = false
- // trigger TransitionGroup update hooks
- const transitionHooks = frag.$transition
- if (transitionHooks && transitionHooks.group && isMounted) {
- triggerTransitionGroupUpdate(transitionHooks)
- }
-
const prevSub = setActiveSub()
if (!isMounted) {
return hooks
}
- const { props, instance, state, delayedLeave, group } = hooks
+ const { props, instance, state, delayedLeave } = hooks
let resolvedHooks = resolveTransitionHooks(
child,
props,
hooks => (resolvedHooks = hooks as VaporTransitionHooks),
)
resolvedHooks.delayedLeave = delayedLeave
- resolvedHooks.group = group
child.$transition = resolvedHooks
if (isFrag) setTransitionHooksOnFragment(block, resolvedHooks)
hasCSSTransform,
onBeforeUpdate,
onUpdated,
- queuePostFlushCb,
resolveTransitionProps,
useTransitionState,
warn,
} from '@vue/runtime-dom'
-import { extend, invokeArrayFns, isArray } from '@vue/shared'
+import { extend, isArray } from '@vue/shared'
import {
type Block,
type TransitionBlock,
props: cssTransitionProps,
state,
instance,
- group: true,
} as VaporTransitionHooks)
children = getTransitionBlocks(slottedBlock)
state,
instance!,
)
- hooks.group = true
setTransitionHooks(child, hooks)
} else if (__DEV__) {
warn(`<transition-group> children must be keyed`)
if (el.isConnected) return el
}
}
-
-/**
- * The implementation of TransitionGroup relies on the onBeforeUpdate and onUpdated hooks.
- * However, when the slot content of TransitionGroup updates, it does not trigger the
- * onBeforeUpdate and onUpdated hooks. Therefore, it is necessary to manually trigger
- * the TransitionGroup update hooks to ensure its proper work.
- */
-export function triggerTransitionGroupUpdate(
- transition: VaporTransitionHooks,
-): void {
- const { instance } = transition
- if (!instance.isUpdating) {
- instance.isUpdating = true
- if (instance.bu) invokeArrayFns(instance.bu)
- queuePostFlushCb(() => {
- instance.isUpdating = false
- if (instance.u) invokeArrayFns(instance.u)
- })
- }
-}