{"version":3,"file":"useTreeNodes.mjs","sources":["../../../../components/tree/hooks/useTreeNodes.tsx"],"sourcesContent":["import { ref, watch, TypeCreateElement, privateKey, TypeVNode } from '../utils/adapt';\nimport { TypeTreeRow, TypeTreeNode, TypeTreeState } from '../types';\nimport TreeItem from '../tree-item';\nimport useTreeEvents from './useTreeEvents';\n\n// tree 节点列表渲染\nexport default function useTreeNodes(state: TypeTreeState) {\n  const { store, scope, allNodes, nodes, virtualConfig } = state;\n  const { handleClick, handleChange } = useTreeEvents(state);\n  const nodesEmpty = ref(false);\n  // 用于存储已呈现节点的缓存\n  const cacheMap = new Map();\n\n  const refresh = () => {\n    allNodes.value = store.getNodes();\n  };\n\n  const refreshVisibleNodes = () => {\n    const isVirtual = virtualConfig?.isVirtualScroll.value;\n    if (isVirtual) return;\n    // 非虚拟滚动，渲染可视节点\n    const list: TypeTreeNode[] = [];\n    // 非虚拟滚动，缓存曾经展示过的节点\n    let hasVisibleNode = false;\n    allNodes.value.forEach((node: TypeTreeNode) => {\n      if (node.visible) {\n        // 曾经展示过的节点加入缓存，避免再次创建\n        hasVisibleNode = true;\n        cacheMap.set(node.value, node.value);\n      }\n      if (cacheMap.has(node.value)) {\n        // 创建的节点是缓存的节点\n        list.push(node);\n      }\n    });\n    cacheMap.forEach((value) => {\n      // 在缓存中清理结构变化后不存在的节点\n      if (!store.getNode(value)) {\n        cacheMap.delete(value);\n      }\n    });\n    // 渲染为平铺列表\n    nodes.value = list;\n    nodesEmpty.value = !hasVisibleNode;\n  };\n\n  const refreshVirtualNodes = () => {\n    const isVirtual = virtualConfig?.isVirtualScroll.value;\n    if (!isVirtual) return;\n    // 虚拟滚动只渲染可见节点\n    const list = virtualConfig.visibleData.value;\n    nodes.value = list;\n    nodesEmpty.value = list.length <= 0;\n  };\n\n  // 创建单个 tree 节点\n  const renderItem = (h: TypeCreateElement, node: TypeTreeRow, index: number, stateId: string) => {\n    const rowIndex = node.VIRTUAL_SCROLL_INDEX || index;\n    const nodeUniqueId = node[privateKey];\n    // vue3 中，不使用动画时，传递 node, 或者单纯传递 itemKey 无法触发 treeItem 的 render 方法\n    // 考虑到有必要对所有节点状态更新，所以添加 stateId 属性，专门用于触发 treeItem 的 render 方法\n    // 使用动画时，transition group 触发了所有节点的 render 方法，回头可以研究看下更合适的方案\n    // 未来也可以根据节点数据的具体更新状态，来决定节点更新与否\n    // 考虑到 value 值有冲突可能，所以使用 privateKey 来作为节点标记\n    const treeItem = (\n      <TreeItem\n        key={nodeUniqueId}\n        rowIndex={rowIndex}\n        stateId={stateId}\n        itemKey={nodeUniqueId}\n        treeScope={scope}\n        // @ts-expect-error\n        onClick={handleClick}\n        onChange={handleChange}\n      />\n    );\n    return treeItem;\n  };\n\n  const renderTreeNodes = (h: TypeCreateElement) => {\n    const stateId = `render-${new Date().getTime()}`;\n    const treeNodeViews: TypeVNode[] = nodes.value.map((node: TypeTreeNode, index) =>\n      renderItem(h, node, index, stateId),\n    );\n    return treeNodeViews;\n  };\n\n  watch(allNodes, refreshVisibleNodes);\n  watch(virtualConfig.visibleData, refreshVirtualNodes);\n\n  refresh();\n  refreshVisibleNodes();\n  refreshVirtualNodes();\n  store.emitter.on('update', refresh);\n\n  return {\n    nodesEmpty,\n    renderTreeNodes,\n  };\n}\n"],"names":["useTreeNodes","state","store","scope","allNodes","nodes","virtualConfig","_useTreeEvents","useTreeEvents","handleClick","handleChange","nodesEmpty","ref","cacheMap","Map","refresh","value","getNodes","refreshVisibleNodes","isVirtual","isVirtualScroll","list","hasVisibleNode","forEach","node","visible","set","has","push","getNode","refreshVirtualNodes","visibleData","length","renderItem","h","index","stateId","rowIndex","VIRTUAL_SCROLL_INDEX","nodeUniqueId","privateKey","treeItem","renderTreeNodes","concat","Date","getTime","treeNodeViews","map","watch","emitter","on"],"mappings":"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"}