(
vnode: VNode,
container: RendererElement,
parentAnchor: RendererNode | null,
{ o: { insert }, m: move }: RendererInternals,
moveType: TeleportMoveTypes = TeleportMoveTypes.REORDER,
)
| 376 | } |
| 377 | |
| 378 | function moveTeleport( |
| 379 | vnode: VNode, |
| 380 | container: RendererElement, |
| 381 | parentAnchor: RendererNode | null, |
| 382 | { o: { insert }, m: move }: RendererInternals, |
| 383 | moveType: TeleportMoveTypes = TeleportMoveTypes.REORDER, |
| 384 | ): void { |
| 385 | // move target anchor if this is a target change. |
| 386 | if (moveType === TeleportMoveTypes.TARGET_CHANGE) { |
| 387 | insert(vnode.targetAnchor!, container, parentAnchor) |
| 388 | } |
| 389 | const { el, anchor, shapeFlag, children, props } = vnode |
| 390 | const isReorder = moveType === TeleportMoveTypes.REORDER |
| 391 | // move main view anchor if this is a re-order. |
| 392 | if (isReorder) { |
| 393 | insert(el!, container, parentAnchor) |
| 394 | } |
| 395 | // if this is a re-order and teleport is enabled (content is in target) |
| 396 | // do not move children. So the opposite is: only move children if this |
| 397 | // is not a reorder, or the teleport is disabled |
| 398 | // #14701 don't move children if in pending mount |
| 399 | if (!pendingMounts.has(vnode) && (!isReorder || isTeleportDisabled(props))) { |
| 400 | // Teleport has either Array children or no children. |
| 401 | if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) { |
| 402 | for (let i = 0; i < (children as VNode[]).length; i++) { |
| 403 | move( |
| 404 | (children as VNode[])[i], |
| 405 | container, |
| 406 | parentAnchor, |
| 407 | MoveType.REORDER, |
| 408 | ) |
| 409 | } |
| 410 | } |
| 411 | } |
| 412 | // move main view anchor if this is a re-order. |
| 413 | if (isReorder) { |
| 414 | insert(anchor!, container, parentAnchor) |
| 415 | } |
| 416 | } |
| 417 | |
| 418 | interface TeleportTargetElement extends Element { |
| 419 | // last teleport target |
no test coverage detected