test: wip more tests for BaseTransition
This commit is contained in:
@@ -65,7 +65,7 @@ interface TransitionState {
|
||||
isUnmounting: boolean
|
||||
// Track pending leave callbacks for children of the same key.
|
||||
// This is used to force remove leaving a child when a new copy is entering.
|
||||
leavingVNodes: Record<string, VNode>
|
||||
leavingVNodes: Map<any, Record<string, VNode>>
|
||||
}
|
||||
|
||||
interface TransitionElement {
|
||||
@@ -84,7 +84,7 @@ const BaseTransitionImpl = {
|
||||
isMounted: false,
|
||||
isLeaving: false,
|
||||
isUnmounting: false,
|
||||
leavingVNodes: Object.create(null)
|
||||
leavingVNodes: new Map()
|
||||
}
|
||||
onMounted(() => {
|
||||
state.isMounted = true
|
||||
@@ -230,8 +230,13 @@ function resolveTransitionHooks(
|
||||
state: TransitionState,
|
||||
callHook: TransitionHookCaller
|
||||
): TransitionHooks {
|
||||
const { leavingVNodes } = state
|
||||
const key = String(vnode.key)
|
||||
const { leavingVNodes } = state
|
||||
let leavingVNodesCache = leavingVNodes.get(vnode.type)!
|
||||
if (!leavingVNodesCache) {
|
||||
leavingVNodesCache = Object.create(null)
|
||||
leavingVNodes.set(vnode.type, leavingVNodesCache)
|
||||
}
|
||||
|
||||
const hooks: TransitionHooks = {
|
||||
persisted,
|
||||
@@ -244,7 +249,7 @@ function resolveTransitionHooks(
|
||||
el._leaveCb(true /* cancelled */)
|
||||
}
|
||||
// for toggled element with same key (v-if)
|
||||
const leavingVNode = leavingVNodes[key]
|
||||
const leavingVNode = leavingVNodesCache[key]
|
||||
if (
|
||||
leavingVNode &&
|
||||
isSameVNodeType(vnode, leavingVNode) &&
|
||||
@@ -301,9 +306,11 @@ function resolveTransitionHooks(
|
||||
callHook(onAfterLeave, [el])
|
||||
}
|
||||
el._leaveCb = undefined
|
||||
delete leavingVNodes[key]
|
||||
if (leavingVNodesCache[key] === vnode) {
|
||||
delete leavingVNodesCache[key]
|
||||
}
|
||||
})
|
||||
leavingVNodes[key] = vnode
|
||||
leavingVNodesCache[key] = vnode
|
||||
if (onLeave) {
|
||||
onLeave(el, afterLeave)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user