{"version":3,"file":"useTree.mjs","sources":["../../../../../../../../packages/components/tree-v2/src/composables/useTree.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport { isObject } from '@hd-front-end/utils'\nimport {\n  CURRENT_CHANGE,\n  NODE_CLICK,\n  NODE_COLLAPSE,\n  NODE_DROP,\n  NODE_EXPAND,\n  TreeOptionsEnum,\n} from '../virtual-tree'\nimport { useCheck } from './useCheck'\nimport { useFilter } from './useFilter'\n\nimport type {\n  FixedSizeList,\n  Alignment as ScrollStrategy,\n} from '@hd-front-end/components/virtual-list'\nimport type { SetupContext } from 'vue'\nimport type { treeEmits } from '../virtual-tree'\nimport type { CheckboxValueType } from '@hd-front-end/components/checkbox'\nimport type {\n  Tree,\n  TreeData,\n  TreeKey,\n  TreeNode,\n  TreeNodeData,\n  TreeProps,\n} from '../types'\n\nexport function useTree(\n  props: TreeProps,\n  emit: SetupContext<typeof treeEmits>['emit']\n) {\n  const expandedKeySet = ref<Set<TreeKey>>(new Set())\n  const currentKey = ref<TreeKey | undefined>()\n  const tree = shallowRef<Tree | undefined>()\n  const listRef = ref<typeof FixedSizeList | undefined>()\n\n  const {\n    isIndeterminate,\n    isChecked,\n    toggleCheckbox,\n    getCheckedKeys,\n    getCheckedNodes,\n    getHalfCheckedKeys,\n    getHalfCheckedNodes,\n    setChecked,\n    setCheckedKeys,\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  const flattenTree = computed(() => {\n    const expandedKeys = expandedKeySet.value\n    const hiddenKeys = hiddenNodeKeySet.value\n    const flattenNodes: TreeNode[] = []\n    const nodes = tree.value?.treeNodes || []\n\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 (hiddenKeys.has(node.key)) continue\n\n      flattenNodes.push(node)\n      if (node.children && expandedKeys.has(node.key)) {\n        for (let i = node.children.length - 1; i >= 0; --i) {\n          stack.push(node.children[i])\n        }\n      }\n    }\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 (const rawNode of nodes) {\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        node.expanded = expandedKeySet.value.has(value)\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 node[valueKey.value]\n  }\n\n  function getDisabled(node: TreeNodeData): boolean {\n    return node[disabledKey.value]\n  }\n\n  function getLabel(node: TreeNodeData): string {\n    return node[labelKey.value]\n  }\n\n  function toggleExpand(node: TreeNode) {\n    const expandedKeys = expandedKeySet.value\n    if (expandedKeys.has(node.key)) {\n      collapseNode(node)\n    } else {\n      expandNode(node)\n    }\n  }\n\n  function setExpandedKeys(keys: TreeKey[]) {\n    const expandedKeys = new Set<TreeKey>()\n    const nodeMap = tree.value!.treeNodeMap\n\n    expandedKeySet.value.forEach((key) => {\n      const node = nodeMap.get(key)!\n      expandedKeySet.value.delete(node.key)\n      node.expanded = false\n    })\n\n    keys.forEach((k) => {\n      let node = nodeMap.get(k)\n      while (node && !expandedKeys.has(node.key)) {\n        expandedKeys.add(node.key)\n        node.expanded = true\n        node = node.parent\n      }\n    })\n\n    expandedKeySet.value = expandedKeys\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 (\n      props.showCheckbox &&\n      (props.checkOnClickNode || (node.isLeaf && props.checkOnClickLeaf)) &&\n      !node.disabled\n    ) {\n      toggleCheckbox(node, !isChecked(node), true)\n    }\n  }\n\n  function handleNodeDrop(node: TreeNode, e: DragEvent) {\n    emit(NODE_DROP, node.data, node, e)\n  }\n\n  function handleCurrentChange(node: TreeNode) {\n    if (!isCurrent(node)) {\n      currentKey.value = node.key\n      emit(CURRENT_CHANGE, node.data, node)\n    }\n  }\n\n  function handleNodeCheck(node: TreeNode, checked: CheckboxValueType) {\n    toggleCheckbox(node, checked)\n  }\n\n  function expandNode(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 treeNode = treeNodeMap.get(key)\n        if (node && node.level === treeNode?.level) {\n          keySet.delete(key)\n          treeNode.expanded = false\n        }\n      })\n    }\n    keySet.add(node.key)\n    node.expanded = true\n    emit(NODE_EXPAND, node.data, node)\n  }\n\n  function collapseNode(node: TreeNode) {\n    expandedKeySet.value.delete(node.key)\n    node.expanded = false\n    emit(NODE_COLLAPSE, node.data, node)\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 !== undefined && 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): void {\n    currentKey.value = key\n  }\n\n  function setData(data: TreeData) {\n    tree.value = createTree(data)\n  }\n\n  function getNode(data: TreeKey | TreeNodeData) {\n    const key = isObject(data) ? getKey(data) : data\n    return tree.value?.treeNodeMap.get(key)\n  }\n\n  function scrollToNode(key: TreeKey, strategy: ScrollStrategy = 'auto') {\n    const node = getNode(key)\n    if (node && listRef.value) {\n      listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy)\n    }\n  }\n\n  function scrollTo(offset: number) {\n    listRef.value?.scrollTo(offset)\n  }\n\n  watch(\n    () => props.currentNodeKey,\n    (key) => {\n      currentKey.value = key\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  watch(\n    () => props.defaultExpandedKeys,\n    (key) => {\n      expandedKeySet.value = new Set<TreeKey>(key)\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  watch(\n    () => props.data,\n    (data: TreeData) => {\n      setData(data)\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  return {\n    tree,\n    flattenTree,\n    isNotEmpty,\n    listRef,\n    getKey,\n    getChildren,\n    toggleExpand,\n    toggleCheckbox,\n    isChecked,\n    isIndeterminate,\n    isDisabled,\n    isCurrent,\n    isForceHiddenExpandIcon,\n    handleNodeClick,\n    handleNodeDrop,\n    handleNodeCheck,\n    // expose\n    getCurrentNode,\n    getCurrentKey,\n    setCurrentKey,\n    getCheckedKeys,\n    getCheckedNodes,\n    getHalfCheckedKeys,\n    getHalfCheckedNodes,\n    setChecked,\n    setCheckedKeys,\n    filter,\n    setData,\n    getNode,\n    expandNode,\n    collapseNode,\n    setExpandedKeys,\n    scrollToNode,\n    scrollTo,\n  }\n}\n"],"names":[],"mappings":"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"}