{"version":3,"file":"useFilter.mjs","sources":["../../../../../../packages/components/tree/src/composables/useFilter.ts"],"sourcesContent":["import { ref } from 'vue'\nimport type { Ref } from 'vue'\nimport type { TreeProps, TreeKey, TreeNode, Tree } from '../types'\nimport { getChainValue } from '@element-ultra/utils'\n\n// When the data volume is very large using filter will cause lag\n// I haven't found a better way to optimize it for now\n// Maybe this problem should be left to the server side\nexport function useFilter(props: TreeProps, tree: Ref<Tree | undefined>) {\n  const hiddenNodeKeySet = ref<Set<TreeKey>>(new Set([]))\n  const hiddenExpandIconKeySet = ref<Set<TreeKey>>(new Set([]))\n\n\n  let labelKey = props.props?.label ?? 'label'\n\n  function doFilter(query: string) {\n    const expandKeySet = new Set<TreeKey>()\n    const hiddenExpandIconKeys = hiddenExpandIconKeySet.value\n    const hiddenKeys = hiddenNodeKeySet.value\n    const family: TreeNode[] = []\n    const nodes = tree.value?.treeNodes || []\n    const filter = props.filterMethod || ((query, data) => {\n      return getChainValue(data, labelKey)?.includes(query)\n    })\n    hiddenKeys.clear()\n\n    function traverse(nodes: TreeNode[]) {\n      nodes.forEach((node) => {\n        family.push(node)\n        if (filter?.(query, node.data)) {\n          family.forEach((member) => {\n            expandKeySet.add(member.key)\n          })\n        } else if (node.isLeaf) {\n          hiddenKeys.add(node.key)\n        }\n        const children = node.children\n        if (children) {\n          traverse(children)\n        }\n        if (!node.isLeaf) {\n          if (!expandKeySet.has(node.key)) {\n            hiddenKeys.add(node.key)\n          } else if (children) {\n            // If all child nodes are hidden, then the expand icon will be hidden\n            let allHidden = true\n            for (let i = 0; i < children.length; ++i) {\n              const childNode = children[i]\n              if (!hiddenKeys.has(childNode.key)) {\n                allHidden = false\n                break\n              }\n            }\n            if (allHidden) {\n              hiddenExpandIconKeys.add(node.key)\n            } else {\n              hiddenExpandIconKeys.delete(node.key)\n            }\n          }\n        }\n        family.pop()\n      })\n    }\n    traverse(nodes)\n    return expandKeySet\n  }\n\n  function isForceHiddenExpandIcon(node: TreeNode): boolean {\n    return hiddenExpandIconKeySet.value.has(node.key)\n  }\n\n  return {\n    hiddenExpandIconKeySet,\n    hiddenNodeKeySet,\n    doFilter,\n    isForceHiddenExpandIcon,\n  }\n}\n"],"names":["_a","query","nodes"],"mappings":"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"}