vue3-core/packages/runtime-vapor/src/apiCreateIf.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

39 lines
961 B
TypeScript
Raw Normal View History

import { type Block, type BlockFn, insert } from './block'
import { isHydrating, locateHydrationNode } from './dom/hydration'
import {
insertionAnchor,
insertionParent,
resetInsertionState,
} from './insertionState'
2024-12-14 20:37:43 +08:00
import { renderEffect } from './renderEffect'
import { DynamicFragment } from './fragment'
2024-12-11 11:50:17 +08:00
export function createIf(
condition: () => any,
b1: BlockFn,
b2?: BlockFn,
once?: boolean,
): Block {
const _insertionParent = insertionParent
const _insertionAnchor = insertionAnchor
if (isHydrating) {
locateHydrationNode()
} else {
resetInsertionState()
}
let frag: Block
2024-12-14 20:37:43 +08:00
if (once) {
frag = condition() ? b1() : b2 ? b2() : []
2024-12-14 20:37:43 +08:00
} else {
frag = __DEV__ ? new DynamicFragment('if') : new DynamicFragment()
renderEffect(() => (frag as DynamicFragment).update(condition() ? b1 : b2))
2024-12-14 20:37:43 +08:00
}
if (!isHydrating && _insertionParent) {
insert(frag, _insertionParent, _insertionAnchor)
}
return frag
2024-12-11 11:50:17 +08:00
}