UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 4.92 kB
{"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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"}