UNPKG

element-plus

Version:

A Component Library for Vue 3

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