test: wip more tests for BaseTransition

This commit is contained in:
Evan You
2019-11-27 12:17:16 -05:00
parent fbcc47841b
commit 7209fb66c2
2 changed files with 355 additions and 41 deletions

View File

@@ -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 {