{"version":3,"file":"useTree2.mjs","sources":["../../../../../../../packages/components/tree/src/useTree.ts"],"sourcesContent":["import { unref } from 'vue'\nimport { cloneDeep } from 'lodash-es'\nimport { forEach } from '@tav-ui/utils/helper/treeHelper'\nimport type { FieldNames, InsertNodeParams, Keys } from './types'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'\n\nexport function useTree(treeDataRef: Ref<TreeDataItem[]>, getFieldNames: ComputedRef<FieldNames>) {\n  function getAllKeys(list?: TreeDataItem[]) {\n    const keys: string[] = []\n    const treeData = list || unref(treeDataRef)\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n    if (!childrenField || !keyField) return keys\n\n    for (let index = 0; index < treeData.length; index++) {\n      const node = treeData[index]\n      keys.push(node[keyField]!)\n      const children = node[childrenField]\n      if (children && children.length) {\n        keys.push(...(getAllKeys(children) as string[]))\n      }\n    }\n    return keys as Keys\n  }\n  // get keys that can be checked and selected\n  function getEnabledKeys(list?: TreeDataItem[]) {\n    const keys: string[] = []\n    const treeData = list || unref(treeDataRef)\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n    if (!childrenField || !keyField) return keys\n\n    for (let index = 0; index < treeData.length; index++) {\n      const node = treeData[index]\n      node.disabled !== true && node.selectable !== false && keys.push(node[keyField]!)\n      const children = node[childrenField]\n      if (children && children.length) {\n        keys.push(...(getEnabledKeys(children) as string[]))\n      }\n    }\n    return keys as Keys\n  }\n\n  function getChildrenKeys(nodeKey: string | number, list?: TreeDataItem[]): Keys {\n    const keys: Keys = []\n    const treeData = list || unref(treeDataRef)\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n    if (!childrenField || !keyField) return keys\n    for (let index = 0; index < treeData.length; index++) {\n      const node = treeData[index]\n      const children = node[childrenField]\n      if (nodeKey === node[keyField]) {\n        keys.push(node[keyField]!)\n        if (children && children.length) {\n          keys.push(...(getAllKeys(children) as string[]))\n        }\n      } else {\n        if (children && children.length) {\n          keys.push(...getChildrenKeys(nodeKey, children))\n        }\n      }\n    }\n    return keys as Keys\n  }\n\n  // Update node\n  function updateNodeByKey(key: string, node: TreeDataItem, list?: TreeDataItem[]) {\n    if (!key) return\n    const treeData = list || unref(treeDataRef)\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n\n    if (!childrenField || !keyField) return\n\n    for (let index = 0; index < treeData.length; index++) {\n      const element: any = treeData[index]\n      const children = element[childrenField]\n\n      if (element[keyField] === key) {\n        treeData[index] = { ...treeData[index], ...node }\n        break\n      } else if (children && children.length) {\n        updateNodeByKey(key, node, element[childrenField])\n      }\n    }\n  }\n\n  // Expand the specified level\n  function filterByLevel(level = 1, list?: TreeDataItem[], currentLevel = 1) {\n    if (!level) {\n      return []\n    }\n    const res: (string | number)[] = []\n    const data = list || unref(treeDataRef) || []\n    for (let index = 0; index < data.length; index++) {\n      const item = data[index]\n\n      const { key: keyField, children: childrenField } = unref(getFieldNames)\n      const key = keyField ? item[keyField] : ''\n      const children = childrenField ? item[childrenField] : []\n      res.push(key)\n      if (children && children.length && currentLevel < level) {\n        currentLevel += 1\n        res.push(...filterByLevel(level, children, currentLevel))\n      }\n    }\n    return res as string[] | number[]\n  }\n\n  /**\n   * 添加节点\n   */\n  function insertNodeByKey({ parentKey = null, node, push = 'push' }: InsertNodeParams) {\n    const treeData: any = cloneDeep(unref(treeDataRef))\n    if (!parentKey) {\n      treeData[push](node)\n      treeDataRef.value = treeData\n      return\n    }\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n    if (!childrenField || !keyField) return\n\n    forEach(treeData, (treeItem) => {\n      if (treeItem[keyField] === parentKey) {\n        treeItem[childrenField] = treeItem[childrenField] || []\n        treeItem[childrenField][push](node)\n        return true\n      }\n    })\n    treeDataRef.value = treeData\n  }\n  /**\n   * 批量添加节点\n   */\n  function insertNodesByKey({ parentKey = null, list, push = 'push' }: InsertNodeParams) {\n    const treeData: any = cloneDeep(unref(treeDataRef))\n    if (!list || list.length < 1) {\n      return\n    }\n    if (!parentKey) {\n      for (let i = 0; i < list.length; i++) {\n        treeData[push](list[i])\n      }\n    } else {\n      const { key: keyField, children: childrenField } = unref(getFieldNames)\n      if (!childrenField || !keyField) return\n\n      forEach(treeData, (treeItem) => {\n        if (treeItem[keyField] === parentKey) {\n          treeItem[childrenField] = treeItem[childrenField] || []\n          for (let i = 0; i < list.length; i++) {\n            treeItem[childrenField][push](list[i])\n          }\n          treeDataRef.value = treeData\n          return true\n        }\n      })\n    }\n  }\n  // Delete node\n  function deleteNodeByKey(key: string, list?: TreeDataItem[]) {\n    if (!key) return\n    const treeData = list || unref(treeDataRef)\n    const { key: keyField, children: childrenField } = unref(getFieldNames)\n    if (!childrenField || !keyField) return\n\n    for (let index = 0; index < treeData.length; index++) {\n      const element: any = treeData[index]\n      const children = element[childrenField]\n\n      if (element[keyField] === key) {\n        treeData.splice(index, 1)\n        break\n      } else if (children && children.length) {\n        deleteNodeByKey(key, element[childrenField])\n      }\n    }\n  }\n  return {\n    deleteNodeByKey,\n    insertNodeByKey,\n    insertNodesByKey,\n    filterByLevel,\n    updateNodeByKey,\n    getAllKeys,\n    getChildrenKeys,\n    getEnabledKeys,\n  }\n}\n"],"names":[],"mappings":"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"}