element-plus
Version:
A Component Library for Vue 3
1 lines • 5.07 kB
Source Map (JSON)
{"version":3,"file":"useFilter.mjs","sources":["../../../../../../../packages/components/tree-v2/src/composables/useFilter.ts"],"sourcesContent":["import { computed, ref } from 'vue'\nimport { isFunction } from '@element-plus/utils'\n\nimport type { Ref } from 'vue'\nimport type { Tree, TreeKey, TreeNode, TreeProps } from '../types'\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 const filterable = computed(() => {\n return isFunction(props.filterMethod)\n })\n\n function doFilter(query: string) {\n if (!filterable.value) {\n return\n }\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\n hiddenKeys.clear()\n function traverse(nodes: TreeNode[]) {\n nodes.forEach((node) => {\n family.push(node)\n if (filter?.(query, node.data, node)) {\n family.forEach((member) => {\n expandKeySet.add(member.key)\n member.expanded = true\n })\n } else {\n node.expanded = false\n if (node.isLeaf) {\n hiddenKeys.add(node.key)\n }\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 (const childNode of children) {\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":["nodes"],"mappings":"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"}