{"version":3,"file":"use-render-flatten-nodes.mjs","sources":["../../../../../../../packages/components/tree/src/hooks/use-render-flatten-nodes.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { ref, watch, getCurrentInstance, computed } from 'vue'\nimport type { TreeNode, TreeData } from '../type'\nimport { transToFlattenNodes, findParentNodeByValue } from '../utils'\nimport { isArray, isFunction } from '../../../../utils/is'\nimport { compose } from '../../../../shared/utils'\nimport { dfs } from '../../../../utils/tree-traverse'\n\nexport const useRenderFlattenNodes = ({\n  nodes,\n  nodeValueMap,\n  originData,\n  defaultUnfoldAll,\n  defaultUnfoldValues,\n  accordion,\n  filterNodeMethod\n}: {\n  nodes: Ref<TreeNode[]>\n  nodeValueMap: Map<string | number, TreeNode>\n  originData: Ref<TreeData[]>\n  defaultUnfoldAll: Ref<boolean>\n  defaultUnfoldValues: Ref<(string | number)[]>\n  accordion: Ref<boolean>\n  filterNodeMethod: ((q: string, data: TreeData) => boolean) | undefined\n}) => {\n  const renderFlattenNodes = ref<TreeNode[]>([])\n\n  const flattenNodes = computed(() => [...nodeValueMap.values()])\n\n  const updateRenderFlattenNodes = (nodes: TreeNode[]) => {\n    renderFlattenNodes.value = compose(transToFlattenNodes, (nodes) => {\n      if (defaultUnfoldAll.value) {\n        dfs<TreeNode>(nodes, {\n          visitor(node) {\n            if (!node.isLeaf) {\n              node.unfold = true\n            }\n          }\n        })\n      } else if (isArray(defaultUnfoldValues.value)) {\n        defaultUnfoldValues.value.forEach((value) => {\n          const node = nodeValueMap.get(value)\n          if (node) {\n            node.pathNode.forEach((n) => {\n              n.unfold = true\n            })\n          }\n        })\n      }\n      return nodes\n    })(nodes)\n  }\n\n  watch(() => nodes.value, updateRenderFlattenNodes)\n\n  const instance = getCurrentInstance()\n\n  const exposed: Record<string, Function> = {\n    // 展开节点\n    unfoldNodes(values?: (number | string)[]) {\n      renderFlattenNodes.value = compose(transToFlattenNodes, (nodes) => {\n        if (isArray(values)) {\n          values.forEach((value) => {\n            const node = nodeValueMap.get(value)\n            if (node) {\n              node.pathNode.forEach((n) => {\n                n.unfold = true\n              })\n            }\n          })\n        } else {\n          flattenNodes.value.forEach((node) => {\n            node.unfold = true\n          })\n        }\n        return nodes\n      })(nodes.value)\n    },\n    // 折叠节点\n    foldNodes(values?: (number | string)[]) {\n      renderFlattenNodes.value = compose(transToFlattenNodes, (nodes) => {\n        if (isArray(values)) {\n          values.forEach((value) => {\n            const node = nodeValueMap.get(value)\n            if (node) {\n              node.unfold = false\n            }\n          })\n        } else {\n          flattenNodes.value.forEach((node) => {\n            node.unfold = false\n          })\n        }\n        return nodes\n      })(nodes.value)\n    },\n    // 新增node\n    insertNodes(parentValue: number | string, data: TreeData[]) {\n      if (!parentValue) {\n        originData.value.push(...data)\n        return\n      }\n      const node = flattenNodes.value.find((n) => n.value === parentValue)\n      if (!node) return\n      const dataChildren = node.data.children\n      if (dataChildren) {\n        dataChildren.push(...data)\n      } else {\n        node.data.children = [...data]\n      }\n    },\n    // 删除node\n    removeNodes(values: (number | string)[]) {\n      values.forEach((value) => {\n        const parent = findParentNodeByValue(value, nodes.value)\n        const children = parent ? parent.data.children : originData.value\n        if (!children) return\n        const index = children.findIndex((n) => n.value === value)\n        if (~index) {\n          children.splice(index, 1)\n        }\n        const node = nodeValueMap.get(value)\n        if (!node) return\n        dfs<TreeNode>([node!], {\n          visitor(node) {\n            if (nodeValueMap.has(node.value)) {\n              nodeValueMap.delete(node.value)\n            }\n          }\n        })\n      })\n    },\n    // 过滤\n    filter(query: string) {\n      const _nodes = nodes.value.slice()\n      dfs<TreeNode>(_nodes, {\n        visitor(node) {\n          if (!query) {\n            node.filter = false\n            return\n          }\n          const RE = new RegExp(`${query}`, 'ig')\n          let ret = RE.test(String(node.label))\n          if (isFunction(filterNodeMethod)) {\n            ret = filterNodeMethod(query, node.data)\n          }\n          if (ret) {\n            let cur = node\n            while (cur) {\n              cur.filter = false\n              cur = cur.parent as any\n            }\n          } else {\n            node.filter = true\n          }\n        }\n      })\n      updateRenderFlattenNodes(_nodes)\n    }\n  }\n\n  if (instance?.exposed) {\n    Object.keys(exposed).forEach((method) => {\n      instance.exposed![method] = exposed[method]\n    })\n  }\n\n  const emitEvent = (node: TreeNode) => {\n    instance?.emit(node.unfold ? 'unfold-node' : 'fold-node', node)\n  }\n\n  const toggleNodeUnfoldOrFold = (node: TreeNode) => {\n    if (node.isLeaf) return\n    renderFlattenNodes.value = compose(transToFlattenNodes, (nodes) => {\n      if (accordion.value) {\n        const parent = findParentNodeByValue(node.value, nodes)\n        const children = parent ? parent.children : nodes\n        children?.forEach((n) => {\n          if (n.value !== node.value) {\n            n.unfold = false\n          }\n        })\n      }\n      node.unfold = !node.unfold\n      return nodes\n    })(nodes.value)\n    emitEvent(node)\n  }\n\n  return {\n    renderFlattenNodes,\n    toggleNodeUnfoldOrFold\n  }\n}\n"],"names":["nodes","node"],"mappings":"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"}