element-plus
Version:
A Component Library for Vue 3
1 lines • 18.9 kB
Source Map (JSON)
{"version":3,"file":"useTree.mjs","sources":["../../../../../../../packages/components/tree-v2/src/composables/useTree.ts"],"sourcesContent":["import { computed, ref, shallowRef, watch } from 'vue'\nimport { isObject } from '@element-plus/utils'\nimport {\n CURRENT_CHANGE,\n NODE_CLICK,\n NODE_COLLAPSE,\n NODE_DROP,\n NODE_EXPAND,\n TreeOptionsEnum,\n} from '../virtual-tree'\nimport { useCheck } from './useCheck'\nimport { useFilter } from './useFilter'\n\nimport type {\n FixedSizeList,\n Alignment as ScrollStrategy,\n} from '@element-plus/components/virtual-list'\nimport type { SetupContext } from 'vue'\nimport type { treeEmits } from '../virtual-tree'\nimport type { CheckboxValueType } from '@element-plus/components/checkbox'\nimport type {\n Tree,\n TreeData,\n TreeKey,\n TreeNode,\n TreeNodeData,\n TreeProps,\n} from '../types'\n\nexport function useTree(\n props: TreeProps,\n emit: SetupContext<typeof treeEmits>['emit']\n) {\n const expandedKeySet = ref<Set<TreeKey>>(new Set())\n const currentKey = ref<TreeKey | undefined>()\n const tree = shallowRef<Tree | undefined>()\n const listRef = ref<typeof FixedSizeList | undefined>()\n\n const {\n isIndeterminate,\n isChecked,\n toggleCheckbox,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n } = useCheck(props, tree)\n\n const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(\n props,\n tree\n )\n\n const valueKey = computed(() => {\n return props.props?.value || TreeOptionsEnum.KEY\n })\n const childrenKey = computed(() => {\n return props.props?.children || TreeOptionsEnum.CHILDREN\n })\n const disabledKey = computed(() => {\n return props.props?.disabled || TreeOptionsEnum.DISABLED\n })\n const labelKey = computed(() => {\n return props.props?.label || TreeOptionsEnum.LABEL\n })\n\n const flattenTree = computed(() => {\n const expandedKeys = expandedKeySet.value\n const hiddenKeys = hiddenNodeKeySet.value\n const flattenNodes: TreeNode[] = []\n const nodes = tree.value?.treeNodes || []\n\n const stack: TreeNode[] = []\n for (let i = nodes.length - 1; i >= 0; --i) {\n stack.push(nodes[i])\n }\n while (stack.length) {\n const node = stack.pop()!\n if (hiddenKeys.has(node.key)) continue\n\n flattenNodes.push(node)\n if (node.children && expandedKeys.has(node.key)) {\n for (let i = node.children.length - 1; i >= 0; --i) {\n stack.push(node.children[i])\n }\n }\n }\n\n return flattenNodes\n })\n\n const isNotEmpty = computed(() => {\n return flattenTree.value.length > 0\n })\n\n function createTree(data: TreeData): Tree {\n const treeNodeMap: Map<TreeKey, TreeNode> = new Map()\n const levelTreeNodeMap: Map<number, TreeNode[]> = new Map()\n let maxLevel = 1\n function traverse(\n nodes: TreeData,\n level = 1,\n parent: TreeNode | undefined = undefined\n ) {\n const siblings: TreeNode[] = []\n for (const rawNode of nodes) {\n const value = getKey(rawNode)\n const node: TreeNode = {\n level,\n key: value,\n data: rawNode,\n }\n node.label = getLabel(rawNode)\n node.parent = parent\n const children = getChildren(rawNode)\n node.disabled = getDisabled(rawNode)\n node.isLeaf = !children || children.length === 0\n node.expanded = expandedKeySet.value.has(value)\n if (children && children.length) {\n node.children = traverse(children, level + 1, node)\n }\n siblings.push(node)\n treeNodeMap.set(value, node)\n if (!levelTreeNodeMap.has(level)) {\n levelTreeNodeMap.set(level, [])\n }\n levelTreeNodeMap.get(level)?.push(node)\n }\n if (level > maxLevel) {\n maxLevel = level\n }\n return siblings\n }\n const treeNodes: TreeNode[] = traverse(data)\n return {\n treeNodeMap,\n levelTreeNodeMap,\n maxLevel,\n treeNodes,\n }\n }\n\n function filter(query: string) {\n const keys = doFilter(query)\n if (keys) {\n expandedKeySet.value = keys\n }\n }\n\n function getChildren(node: TreeNodeData): TreeNodeData[] {\n return node[childrenKey.value]\n }\n\n function getKey(node: TreeNodeData): TreeKey {\n if (!node) {\n return ''\n }\n return node[valueKey.value]\n }\n\n function getDisabled(node: TreeNodeData): boolean {\n return node[disabledKey.value]\n }\n\n function getLabel(node: TreeNodeData): string {\n return node[labelKey.value]\n }\n\n function toggleExpand(node: TreeNode) {\n const expandedKeys = expandedKeySet.value\n if (expandedKeys.has(node.key)) {\n collapseNode(node)\n } else {\n expandNode(node)\n }\n }\n\n function setExpandedKeys(keys: TreeKey[]) {\n const expandedKeys = new Set<TreeKey>()\n const nodeMap = tree.value!.treeNodeMap\n\n expandedKeySet.value.forEach((key) => {\n const node = nodeMap.get(key)!\n expandedKeySet.value.delete(node.key)\n node.expanded = false\n })\n\n keys.forEach((k) => {\n let node = nodeMap.get(k)\n while (node && !expandedKeys.has(node.key)) {\n expandedKeys.add(node.key)\n node.expanded = true\n node = node.parent\n }\n })\n\n expandedKeySet.value = expandedKeys\n }\n\n function handleNodeClick(node: TreeNode, e: MouseEvent) {\n emit(NODE_CLICK, node.data, node, e)\n handleCurrentChange(node)\n if (props.expandOnClickNode) {\n toggleExpand(node)\n }\n if (\n props.showCheckbox &&\n (props.checkOnClickNode || (node.isLeaf && props.checkOnClickLeaf)) &&\n !node.disabled\n ) {\n toggleCheckbox(node, !isChecked(node), true)\n }\n }\n\n function handleNodeDrop(node: TreeNode, e: DragEvent) {\n emit(NODE_DROP, node.data, node, e)\n }\n\n function handleCurrentChange(node: TreeNode) {\n if (!isCurrent(node)) {\n currentKey.value = node.key\n emit(CURRENT_CHANGE, node.data, node)\n }\n }\n\n function handleNodeCheck(node: TreeNode, checked: CheckboxValueType) {\n toggleCheckbox(node, checked)\n }\n\n function expandNode(node: TreeNode) {\n const keySet = expandedKeySet.value\n if (tree.value && props.accordion) {\n // whether only one node among the same level can be expanded at one time\n const { treeNodeMap } = tree.value\n keySet.forEach((key) => {\n const treeNode = treeNodeMap.get(key)\n if (node && node.level === treeNode?.level) {\n keySet.delete(key)\n treeNode.expanded = false\n }\n })\n }\n keySet.add(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = true\n emit(NODE_EXPAND, _node.data, _node)\n }\n }\n\n function collapseNode(node: TreeNode) {\n expandedKeySet.value.delete(node.key)\n const _node = getNode(node.key)\n if (_node) {\n _node.expanded = false\n emit(NODE_COLLAPSE, _node.data, _node)\n }\n }\n\n function isDisabled(node: TreeNode): boolean {\n return !!node.disabled\n }\n\n function isCurrent(node: TreeNode): boolean {\n const current = currentKey.value\n return current !== undefined && current === node.key\n }\n\n function getCurrentNode(): TreeNodeData | undefined {\n if (!currentKey.value) return undefined\n return tree.value?.treeNodeMap.get(currentKey.value)?.data\n }\n\n function getCurrentKey(): TreeKey | undefined {\n return currentKey.value\n }\n\n function setCurrentKey(key: TreeKey): void {\n currentKey.value = key\n }\n\n function setData(data: TreeData) {\n tree.value = createTree(data)\n }\n\n function getNode(data: TreeKey | TreeNodeData) {\n const key = isObject(data) ? getKey(data) : data\n return tree.value?.treeNodeMap.get(key)\n }\n\n function scrollToNode(key: TreeKey, strategy: ScrollStrategy = 'auto') {\n const node = getNode(key)\n if (node && listRef.value) {\n listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy)\n }\n }\n\n function scrollTo(offset: number) {\n listRef.value?.scrollTo(offset)\n }\n\n watch(\n () => props.currentNodeKey,\n (key) => {\n currentKey.value = key\n },\n {\n immediate: true,\n }\n )\n\n watch(\n () => props.defaultExpandedKeys,\n (key) => {\n expandedKeySet.value = new Set<TreeKey>(key)\n },\n {\n immediate: true,\n }\n )\n\n watch(\n () => props.data!,\n (data: TreeData) => {\n setData(data)\n },\n {\n immediate: true,\n }\n )\n\n return {\n tree,\n flattenTree,\n isNotEmpty,\n listRef,\n getKey,\n getChildren,\n toggleExpand,\n toggleCheckbox,\n isChecked,\n isIndeterminate,\n isDisabled,\n isCurrent,\n isForceHiddenExpandIcon,\n handleNodeClick,\n handleNodeDrop,\n handleNodeCheck,\n // expose\n getCurrentNode,\n getCurrentKey,\n setCurrentKey,\n getCheckedKeys,\n getCheckedNodes,\n getHalfCheckedKeys,\n getHalfCheckedNodes,\n setChecked,\n setCheckedKeys,\n filter,\n setData,\n getNode,\n expandNode,\n collapseNode,\n setExpandedKeys,\n scrollToNode,\n scrollTo,\n }\n}\n"],"names":[],"mappings":"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"}