rawPropsProxyHandlers,
) as any as TeleportProps
+ let children: Block
+
+ renderEffect(() => {
+ frag.updateChildren(
+ (children = slots.default && (slots.default as BlockFn)()),
+ )
+ })
+
renderEffect(() => {
- const children = slots.default && (slots.default as BlockFn)()
// access the props to trigger tracking
- frag.update(extend({}, resolvedProps), children)
+ frag.update(extend({}, resolvedProps), children!)
})
return frag
targetStart?: Node | null
mainAnchor?: Node
placeholder?: Node
- currentParent?: ParentNode | null
+ container?: ParentNode | null
+ currentAnchor?: Node | null
constructor(anchorLabel?: string) {
super([])
__DEV__ && anchorLabel ? createComment(anchorLabel) : createTextNode()
}
- update(props: TeleportProps, children: Block): void {
+ updateChildren(children: Block): void {
const parent = this.anchor.parentNode
+ if (!parent) return
+
+ const container = this.container || parent
+
// teardown previous
- if (this.nodes && (this.currentParent || parent)) {
- remove(this.nodes, (this.currentParent || parent)!)
- }
+ remove(this.nodes, container)
+
+ insert(
+ (this.nodes = children),
+ container,
+ this.currentAnchor || this.anchor,
+ )
+ }
+ update(props: TeleportProps, children: Block): void {
+ const parent = this.anchor.parentNode
this.nodes = children
const disabled = isTeleportDisabled(props)
const mount = (parent: ParentNode, anchor: Node | null) => {
- insert(this.nodes, (this.currentParent = parent), anchor)
+ insert(
+ this.nodes,
+ (this.container = parent),
+ (this.currentAnchor = anchor),
+ )
}
const mountToTarget = () => {
remove = (parent: ParentNode | undefined): void => {
// remove nodes
- remove(this.nodes, this.currentParent || parent)
+ remove(this.nodes, this.container || parent)
// remove anchors
if (this.targetStart) {