{"version":3,"file":"useTree.mjs","sources":["../../../../../../packages/components/tree/src/composables/useTree.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport {\n  NODE_CLICK,\n  NODE_COLLAPSE,\n  NODE_EXPAND,\n  CURRENT_CHANGE,\n  TreeOptionsEnum,\n  TreeEmit\n} from '../virtual-tree'\nimport { useCheck } from './useCheck'\nimport { useFilter } from './useFilter'\nimport type {\n  TreeProps,\n  TreeNodeData,\n  TreeKey,\n  TreeNode,\n  TreeData,\n  Tree\n} from '../types'\nimport { dfs, getChainValue } from '@element-ultra/utils'\n\nexport function useTree(props: TreeProps, emit: TreeEmit) {\n  const expandedKeySet = ref(new Set<TreeKey>())\n  watch(\n    [\n      () => props.data,\n      () => props.defaultExpandAll,\n      () => props.defaultExpandedKeys\n    ],\n    ([data, expandAll, defaultExpandedKeys]) => {\n      let expandedKeys = defaultExpandedKeys\n\n      if (!expandedKeys) {\n        if (!expandAll) return\n        const valueKey = props.props.value ?? 'value'\n        expandedKeys = []\n        dfs(data, item => {\n          expandedKeys!.push(getChainValue(item, valueKey))\n        })\n      }\n\n      expandedKeySet.value = new Set(expandedKeys)\n    },\n    { immediate: true }\n  )\n\n  const currentKey = ref<TreeKey | undefined>(props.currentNodeKey)\n  const tree = shallowRef<Tree | undefined>()\n\n  watch(\n    () => props.currentNodeKey,\n    key => {\n      currentKey.value = key\n    }\n  )\n\n  const {\n    isIndeterminate,\n    isChecked,\n    toggleCheckbox,\n    getChecked,\n    getHalfChecked,\n    setChecked,\n    setCheckedKeys,\n    setCheckedAll\n  } = useCheck(props, tree)\n\n  const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(\n    props,\n    tree\n  )\n\n  const valueKey = computed(() => {\n    return props.props?.value || TreeOptionsEnum.KEY\n  })\n  const childrenKey = computed(() => {\n    return props.props?.children || TreeOptionsEnum.CHILDREN\n  })\n  const disabledKey = computed(() => {\n    return props.props?.disabled || TreeOptionsEnum.DISABLED\n  })\n  const labelKey = computed(() => {\n    return props.props?.label || TreeOptionsEnum.LABEL\n  })\n\n  watch(\n    () => props.data,\n    (data: TreeData) => {\n      setData(data)\n    },\n    { immediate: true }\n  )\n\n  const flattenTree = computed(() => {\n    const expandedKeys = expandedKeySet.value\n    const hiddenKeys = hiddenNodeKeySet.value\n    const flattenNodes: TreeNode[] = []\n    const nodes = (tree.value && tree.value.treeNodes) || []\n\n    function traverse() {\n      const stack: TreeNode[] = []\n      for (let i = nodes.length - 1; i >= 0; --i) {\n        stack.push(nodes[i])\n      }\n      while (stack.length) {\n        const node = stack.pop()\n        if (!node) continue\n        if (!hiddenKeys.has(node.key)) {\n          flattenNodes.push(node)\n        }\n\n        if (expandedKeys.has(node.key)) {\n          const children = node.children\n          if (children) {\n            const length = children.length\n            for (let i = length - 1; i >= 0; --i) {\n              stack.push(children[i])\n            }\n          }\n        }\n      }\n    }\n\n    traverse()\n\n    return flattenNodes\n  })\n\n  const isNotEmpty = computed(() => {\n    return flattenTree.value.length > 0\n  })\n\n  function createTree(data: TreeData): Tree {\n    const treeNodeMap: Map<TreeKey, TreeNode> = new Map()\n    const levelTreeNodeMap: Map<number, TreeNode[]> = new Map()\n    let maxLevel = 1\n    function traverse(\n      nodes: TreeData,\n      level = 1,\n      parent: TreeNode | undefined = undefined\n    ) {\n      const siblings: TreeNode[] = []\n      for (let index = 0; index < nodes.length; ++index) {\n        const rawNode = nodes[index]\n        const value = getKey(rawNode)\n        const node: TreeNode = {\n          level,\n          key: value,\n          data: rawNode\n        }\n        node.label = getLabel(rawNode)\n        node.parent = parent\n        const children = getChildren(rawNode)\n        node.disabled = getDisabled(rawNode)\n        node.isLeaf = !children || children.length === 0\n        if (children && children.length) {\n          node.children = traverse(children, level + 1, node)\n        }\n        siblings.push(node)\n        treeNodeMap.set(value, node)\n        if (!levelTreeNodeMap.has(level)) {\n          levelTreeNodeMap.set(level, [])\n        }\n        levelTreeNodeMap.get(level)?.push(node)\n      }\n      if (level > maxLevel) {\n        maxLevel = level\n      }\n      return siblings\n    }\n    const treeNodes: TreeNode[] = traverse(data)\n    return {\n      treeNodeMap,\n      levelTreeNodeMap,\n      maxLevel,\n      treeNodes\n    }\n  }\n\n  function filter(query: string) {\n    const keys = doFilter(query)\n    if (keys) {\n      expandedKeySet.value = keys\n    }\n  }\n\n  function getChildren(node: TreeNodeData): TreeNodeData[] {\n    return node[childrenKey.value]\n  }\n\n  function getKey(node: TreeNodeData): TreeKey {\n    if (!node) {\n      return ''\n    }\n    return getChainValue(node, valueKey.value)\n  }\n\n  function getDisabled(node: TreeNodeData): boolean {\n    return getChainValue(node, disabledKey.value)\n  }\n\n  function getLabel(node: TreeNodeData): string {\n    return getChainValue(node, labelKey.value)\n  }\n\n  function toggleExpand(node: TreeNode) {\n    const expandedKeys = expandedKeySet.value\n    if (expandedKeys.has(node.key)) {\n      collapse(node)\n    } else {\n      expand(node)\n    }\n  }\n\n  function handleNodeClick(node: TreeNode, e: MouseEvent) {\n    emit(NODE_CLICK, node.data, node, e)\n    handleCurrentChange(node)\n    if (props.expandOnClickNode) {\n      toggleExpand(node)\n    }\n    if (props.showCheckbox && props.checkOnClickNode && !node.disabled) {\n      toggleCheckbox(node, !isChecked(node), true)\n    }\n  }\n\n  function handleCurrentChange(node: TreeNode) {\n    if (!isCurrent(node)) {\n      currentKey.value = node.key\n      emit(CURRENT_CHANGE, node.data, node)\n    } else {\n      currentKey.value = undefined\n      emit(CURRENT_CHANGE, undefined, undefined)\n    }\n  }\n\n  function handleNodeCheck(node: TreeNode, checked: boolean) {\n    toggleCheckbox(node, checked)\n  }\n\n  function expand(node: TreeNode) {\n    const keySet = expandedKeySet.value\n    if (tree?.value && props.accordion) {\n      // whether only one node among the same level can be expanded at one time\n      const { treeNodeMap } = tree.value\n      keySet.forEach(key => {\n        const node = treeNodeMap.get(key)\n        if (node && node.level === node.level) {\n          keySet.delete(key)\n        }\n      })\n    }\n    keySet.add(node.key)\n    emit(NODE_EXPAND, node.data, node)\n  }\n\n  function collapse(node: TreeNode) {\n    expandedKeySet.value.delete(node.key)\n    emit(NODE_COLLAPSE, node.data, node)\n  }\n\n  function isExpanded(node: TreeNode): boolean {\n    return expandedKeySet.value.has(node.key)\n  }\n\n  function isDisabled(node: TreeNode): boolean {\n    return !!node.disabled\n  }\n\n  function isCurrent(node: TreeNode): boolean {\n    const current = currentKey.value\n    return !!current && current === node.key\n  }\n\n  function getCurrentNode(): TreeNodeData | undefined {\n    if (!currentKey.value) return undefined\n    return tree?.value?.treeNodeMap.get(currentKey.value)?.data\n  }\n\n  function getCurrentKey(): TreeKey | undefined {\n    return currentKey.value\n  }\n\n  function setCurrentKey(key: TreeKey | undefined): void {\n    currentKey.value = key\n  }\n\n  function setData(data: TreeData) {\n    tree.value = createTree(data)\n  }\n\n  function getTreeNodes() {\n    return tree.value\n  }\n\n  return {\n    tree,\n    flattenTree,\n    isNotEmpty,\n    getKey,\n    getChildren,\n    toggleExpand,\n    toggleCheckbox,\n    isExpanded,\n    isChecked,\n    isIndeterminate,\n    isDisabled,\n    isCurrent,\n    isForceHiddenExpandIcon,\n    handleNodeClick,\n    handleNodeCheck,\n    // expose\n    getCurrentNode,\n    getCurrentKey,\n    setCurrentKey,\n    getChecked,\n    getHalfChecked,\n    setChecked,\n    setCheckedKeys,\n    filter,\n    setData,\n    setCheckedAll,\n    getTreeNodes\n  }\n}\n"],"names":["valueKey","node"],"mappings":"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"}