2019-09-09 17:59:53 +00:00
|
|
|
import { VNode } from './vnode'
|
2019-09-07 15:28:40 +00:00
|
|
|
|
|
|
|
export const SuspenseSymbol = __DEV__ ? Symbol('Suspense key') : Symbol()
|
|
|
|
|
2019-09-09 20:00:50 +00:00
|
|
|
export interface SuspenseBoundary<
|
|
|
|
HostNode,
|
|
|
|
HostElement,
|
|
|
|
HostVNode = VNode<HostNode, HostElement>
|
|
|
|
> {
|
|
|
|
vnode: HostVNode
|
2019-09-09 17:59:53 +00:00
|
|
|
parent: SuspenseBoundary<HostNode, HostElement> | null
|
2019-09-09 20:44:25 +00:00
|
|
|
subTree: HostVNode | null
|
|
|
|
oldSubTree: HostVNode | null
|
2019-09-09 20:00:50 +00:00
|
|
|
fallbackTree: HostVNode | null
|
|
|
|
oldFallbackTree: HostVNode | null
|
2019-09-07 15:28:40 +00:00
|
|
|
deps: number
|
|
|
|
isResolved: boolean
|
2019-09-09 17:59:53 +00:00
|
|
|
bufferedJobs: Function[]
|
2019-09-09 20:00:50 +00:00
|
|
|
retry(): void
|
2019-09-07 15:28:40 +00:00
|
|
|
resolve(): void
|
|
|
|
}
|
|
|
|
|
2019-09-09 17:59:53 +00:00
|
|
|
export function createSuspenseBoundary<HostNode, HostElement>(
|
2019-09-09 20:00:50 +00:00
|
|
|
vnode: VNode<HostNode, HostElement>,
|
2019-09-10 14:09:04 +00:00
|
|
|
parent: SuspenseBoundary<HostNode, HostElement> | null,
|
|
|
|
retry: () => void,
|
|
|
|
resolve: () => void
|
2019-09-09 17:59:53 +00:00
|
|
|
): SuspenseBoundary<HostNode, HostElement> {
|
2019-09-10 14:09:04 +00:00
|
|
|
return {
|
2019-09-09 20:00:50 +00:00
|
|
|
vnode,
|
2019-09-09 17:59:53 +00:00
|
|
|
parent,
|
2019-09-07 15:28:40 +00:00
|
|
|
deps: 0,
|
2019-09-09 20:44:25 +00:00
|
|
|
subTree: null,
|
|
|
|
oldSubTree: null,
|
2019-09-09 17:59:53 +00:00
|
|
|
fallbackTree: null,
|
2019-09-09 20:00:50 +00:00
|
|
|
oldFallbackTree: null,
|
2019-09-07 15:28:40 +00:00
|
|
|
isResolved: false,
|
2019-09-09 17:59:53 +00:00
|
|
|
bufferedJobs: [],
|
2019-09-10 14:09:04 +00:00
|
|
|
retry,
|
|
|
|
resolve
|
2019-09-07 15:28:40 +00:00
|
|
|
}
|
|
|
|
}
|