@@ -17,8 +17,9 @@ import { toRaw } from '@vue/reactivity'
|
||||
import { callWithAsyncErrorHandling, ErrorCodes } from '../errorHandling'
|
||||
import { ShapeFlags } from '@vue/shared'
|
||||
import { onBeforeUnmount, onMounted } from '../apiLifecycle'
|
||||
import { RendererElement } from '../renderer'
|
||||
|
||||
export interface BaseTransitionProps {
|
||||
export interface BaseTransitionProps<HostElement = RendererElement> {
|
||||
mode?: 'in-out' | 'out-in' | 'default'
|
||||
appear?: boolean
|
||||
|
||||
@@ -32,25 +33,25 @@ export interface BaseTransitionProps {
|
||||
// Hooks. Using camel case for easier usage in render functions & JSX.
|
||||
// In templates these can be written as @before-enter="xxx" as prop names
|
||||
// are camelized.
|
||||
onBeforeEnter?: (el: any) => void
|
||||
onEnter?: (el: any, done: () => void) => void
|
||||
onAfterEnter?: (el: any) => void
|
||||
onEnterCancelled?: (el: any) => void
|
||||
onBeforeEnter?: (el: HostElement) => void
|
||||
onEnter?: (el: HostElement, done: () => void) => void
|
||||
onAfterEnter?: (el: HostElement) => void
|
||||
onEnterCancelled?: (el: HostElement) => void
|
||||
// leave
|
||||
onBeforeLeave?: (el: any) => void
|
||||
onLeave?: (el: any, done: () => void) => void
|
||||
onAfterLeave?: (el: any) => void
|
||||
onLeaveCancelled?: (el: any) => void // only fired in persisted mode
|
||||
onBeforeLeave?: (el: HostElement) => void
|
||||
onLeave?: (el: HostElement, done: () => void) => void
|
||||
onAfterLeave?: (el: HostElement) => void
|
||||
onLeaveCancelled?: (el: HostElement) => void // only fired in persisted mode
|
||||
}
|
||||
|
||||
export interface TransitionHooks {
|
||||
persisted: boolean
|
||||
beforeEnter(el: object): void
|
||||
enter(el: object): void
|
||||
leave(el: object, remove: () => void): void
|
||||
beforeEnter(el: RendererElement): void
|
||||
enter(el: RendererElement): void
|
||||
leave(el: RendererElement, remove: () => void): void
|
||||
afterLeave?(): void
|
||||
delayLeave?(
|
||||
el: object,
|
||||
el: RendererElement,
|
||||
earlyRemove: () => void,
|
||||
delayedLeave: () => void
|
||||
): void
|
||||
@@ -222,7 +223,7 @@ if (__DEV__) {
|
||||
// also to avoid inline import() in generated d.ts files
|
||||
export const BaseTransition = (BaseTransitionImpl as any) as {
|
||||
new (): {
|
||||
$props: BaseTransitionProps
|
||||
$props: BaseTransitionProps<any>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +255,7 @@ export function resolveTransitionHooks(
|
||||
onLeave,
|
||||
onAfterLeave,
|
||||
onLeaveCancelled
|
||||
}: BaseTransitionProps,
|
||||
}: BaseTransitionProps<any>,
|
||||
state: TransitionState,
|
||||
instance: ComponentInternalInstance
|
||||
): TransitionHooks {
|
||||
@@ -286,10 +287,10 @@ export function resolveTransitionHooks(
|
||||
if (
|
||||
leavingVNode &&
|
||||
isSameVNodeType(vnode, leavingVNode) &&
|
||||
leavingVNode.el._leaveCb
|
||||
leavingVNode.el!._leaveCb
|
||||
) {
|
||||
// force early removal (not cancelled)
|
||||
leavingVNode.el._leaveCb()
|
||||
leavingVNode.el!._leaveCb()
|
||||
}
|
||||
callHook(onBeforeEnter, [el])
|
||||
},
|
||||
|
||||
@@ -17,7 +17,9 @@ import {
|
||||
RendererInternals,
|
||||
queuePostRenderEffect,
|
||||
invokeHooks,
|
||||
MoveType
|
||||
MoveType,
|
||||
RendererElement,
|
||||
RendererNode
|
||||
} from '../renderer'
|
||||
import { setTransitionHooks } from './BaseTransition'
|
||||
|
||||
@@ -36,7 +38,11 @@ type Keys = Set<CacheKey>
|
||||
export interface KeepAliveSink {
|
||||
renderer: RendererInternals
|
||||
parentSuspense: SuspenseBoundary | null
|
||||
activate: (vnode: VNode, container: object, anchor: object | null) => void
|
||||
activate: (
|
||||
vnode: VNode,
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null
|
||||
) => void
|
||||
deactivate: (vnode: VNode) => void
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import { ComponentInternalInstance } from '../component'
|
||||
import { SuspenseBoundary } from './Suspense'
|
||||
import { RendererInternals, MoveType } from '../renderer'
|
||||
import {
|
||||
RendererInternals,
|
||||
MoveType,
|
||||
RendererElement,
|
||||
RendererNode
|
||||
} from '../renderer'
|
||||
import { VNode, VNodeArrayChildren, VNodeProps } from '../vnode'
|
||||
import { isString, ShapeFlags, PatchFlags } from '@vue/shared'
|
||||
import { warn } from '../warning'
|
||||
@@ -16,8 +21,8 @@ export const PortalImpl = {
|
||||
process(
|
||||
n1: VNode | null,
|
||||
n2: VNode,
|
||||
container: object,
|
||||
anchor: object | null,
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
parentComponent: ComponentInternalInstance | null,
|
||||
parentSuspense: SuspenseBoundary | null,
|
||||
isSVG: boolean,
|
||||
|
||||
@@ -2,7 +2,13 @@ import { VNode, normalizeVNode, VNodeChild, VNodeProps } from '../vnode'
|
||||
import { isFunction, isArray, ShapeFlags } from '@vue/shared'
|
||||
import { ComponentInternalInstance, handleSetupResult } from '../component'
|
||||
import { Slots } from '../componentSlots'
|
||||
import { RendererInternals, MoveType, SetupRenderEffectFn } from '../renderer'
|
||||
import {
|
||||
RendererInternals,
|
||||
MoveType,
|
||||
SetupRenderEffectFn,
|
||||
RendererNode,
|
||||
RendererElement
|
||||
} from '../renderer'
|
||||
import { queuePostFlushCb, queueJob } from '../scheduler'
|
||||
import { updateHOCHostEl } from '../componentRenderUtils'
|
||||
import { pushWarningContext, popWarningContext } from '../warning'
|
||||
@@ -27,8 +33,8 @@ export const SuspenseImpl = {
|
||||
process(
|
||||
n1: VNode | null,
|
||||
n2: VNode,
|
||||
container: object,
|
||||
anchor: object | null,
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
parentComponent: ComponentInternalInstance | null,
|
||||
parentSuspense: SuspenseBoundary | null,
|
||||
isSVG: boolean,
|
||||
@@ -73,8 +79,8 @@ export const Suspense = ((__FEATURE_SUSPENSE__
|
||||
|
||||
function mountSuspense(
|
||||
n2: VNode,
|
||||
container: object,
|
||||
anchor: object | null,
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
parentComponent: ComponentInternalInstance | null,
|
||||
parentSuspense: SuspenseBoundary | null,
|
||||
isSVG: boolean,
|
||||
@@ -132,8 +138,8 @@ function mountSuspense(
|
||||
function patchSuspense(
|
||||
n1: VNode,
|
||||
n2: VNode,
|
||||
container: object,
|
||||
anchor: object | null,
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
parentComponent: ComponentInternalInstance | null,
|
||||
isSVG: boolean,
|
||||
optimized: boolean,
|
||||
@@ -190,21 +196,17 @@ function patchSuspense(
|
||||
suspense.fallbackTree = fallback
|
||||
}
|
||||
|
||||
export interface SuspenseBoundary<
|
||||
HostNode = any,
|
||||
HostElement = any,
|
||||
HostVNode = VNode<HostNode, HostElement>
|
||||
> {
|
||||
vnode: HostVNode
|
||||
parent: SuspenseBoundary<HostNode, HostElement> | null
|
||||
export interface SuspenseBoundary {
|
||||
vnode: VNode
|
||||
parent: SuspenseBoundary | null
|
||||
parentComponent: ComponentInternalInstance | null
|
||||
isSVG: boolean
|
||||
optimized: boolean
|
||||
container: HostElement
|
||||
hiddenContainer: HostElement
|
||||
anchor: HostNode | null
|
||||
subTree: HostVNode
|
||||
fallbackTree: HostVNode
|
||||
container: RendererElement
|
||||
hiddenContainer: RendererElement
|
||||
anchor: RendererNode | null
|
||||
subTree: VNode
|
||||
fallbackTree: VNode
|
||||
deps: number
|
||||
isHydrating: boolean
|
||||
isResolved: boolean
|
||||
@@ -212,30 +214,31 @@ export interface SuspenseBoundary<
|
||||
effects: Function[]
|
||||
resolve(): void
|
||||
recede(): void
|
||||
move(container: HostElement, anchor: HostNode | null, type: MoveType): void
|
||||
next(): HostNode | null
|
||||
move(
|
||||
container: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
type: MoveType
|
||||
): void
|
||||
next(): RendererNode | null
|
||||
registerDep(
|
||||
instance: ComponentInternalInstance,
|
||||
setupRenderEffect: SetupRenderEffectFn<HostNode, HostElement>
|
||||
): void
|
||||
unmount(
|
||||
parentSuspense: SuspenseBoundary<HostNode, HostElement> | null,
|
||||
doRemove?: boolean
|
||||
setupRenderEffect: SetupRenderEffectFn
|
||||
): void
|
||||
unmount(parentSuspense: SuspenseBoundary | null, doRemove?: boolean): void
|
||||
}
|
||||
|
||||
function createSuspenseBoundary<HostNode, HostElement>(
|
||||
vnode: VNode<HostNode, HostElement>,
|
||||
parent: SuspenseBoundary<HostNode, HostElement> | null,
|
||||
function createSuspenseBoundary(
|
||||
vnode: VNode,
|
||||
parent: SuspenseBoundary | null,
|
||||
parentComponent: ComponentInternalInstance | null,
|
||||
container: HostElement,
|
||||
hiddenContainer: HostElement,
|
||||
anchor: HostNode | null,
|
||||
container: RendererElement,
|
||||
hiddenContainer: RendererElement,
|
||||
anchor: RendererNode | null,
|
||||
isSVG: boolean,
|
||||
optimized: boolean,
|
||||
rendererInternals: RendererInternals<HostNode, HostElement>,
|
||||
rendererInternals: RendererInternals,
|
||||
isHydrating = false
|
||||
): SuspenseBoundary<HostNode, HostElement> {
|
||||
): SuspenseBoundary {
|
||||
const {
|
||||
p: patch,
|
||||
m: move,
|
||||
@@ -250,7 +253,7 @@ function createSuspenseBoundary<HostNode, HostElement>(
|
||||
: suspense.fallbackTree
|
||||
|
||||
const { content, fallback } = normalizeSuspenseChildren(vnode)
|
||||
const suspense: SuspenseBoundary<HostNode, HostElement> = {
|
||||
const suspense: SuspenseBoundary = {
|
||||
vnode,
|
||||
parent,
|
||||
parentComponent,
|
||||
@@ -430,7 +433,7 @@ function createSuspenseBoundary<HostNode, HostElement>(
|
||||
// placeholder.
|
||||
hydratedEl
|
||||
? parentNode(hydratedEl)!
|
||||
: parentNode(instance.subTree.el)!,
|
||||
: parentNode(instance.subTree.el!)!,
|
||||
// anchor will not be used if this is hydration, so only need to
|
||||
// consider the comment placeholder case.
|
||||
hydratedEl ? null : next(instance.subTree),
|
||||
@@ -484,7 +487,7 @@ function hydrateSuspense(
|
||||
vnode,
|
||||
parentSuspense,
|
||||
parentComponent,
|
||||
node.parentNode,
|
||||
node.parentNode!,
|
||||
document.createElement('div'),
|
||||
null,
|
||||
isSVG,
|
||||
|
||||
Reference in New Issue
Block a user