UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 24.2 kB
{"version":3,"file":"tree-store.mjs","sources":["../../../../../../../packages/components/tree/src/model/tree-store.ts"],"sourcesContent":["import { nextTick } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { NOOP, hasOwn, isObject, isPropAbsent } from '@element-plus/utils'\nimport Node from './node'\nimport { getNodeKey } from './util'\n\nimport type {\n FilterNodeMethodFunction,\n FilterValue,\n LoadFunction,\n TreeData,\n TreeKey,\n TreeNodeData,\n TreeOptionProps,\n TreeStoreNodesMap,\n TreeStoreOptions,\n} from '../tree.type'\n\nexport default class TreeStore {\n currentNode: Node | null\n currentNodeKey: TreeKey | null\n nodesMap: TreeStoreNodesMap\n root!: Node\n data!: TreeData\n lazy = false\n load?: LoadFunction\n filterNodeMethod?: FilterNodeMethodFunction\n key!: TreeKey\n defaultCheckedKeys?: TreeKey[]\n checkStrictly = false\n defaultExpandedKeys?: TreeKey[]\n autoExpandParent = false\n defaultExpandAll = false\n checkDescendants = false\n props!: TreeOptionProps\n\n constructor(options: TreeStoreOptions) {\n this.currentNode = null\n this.currentNodeKey = null\n\n for (const option in options) {\n if (hasOwn(options, option)) {\n this[option] = options[option]\n }\n }\n\n this.nodesMap = {}\n }\n\n initialize() {\n this.root = new Node({\n data: this.data,\n store: this,\n })\n this.root.initialize()\n\n if (this.lazy && this.load) {\n const loadFn = this.load\n loadFn(\n this.root,\n (data) => {\n this.root.doCreateChildren(data)\n this._initDefaultCheckedNodes()\n },\n NOOP\n )\n } else {\n this._initDefaultCheckedNodes()\n }\n }\n\n filter(value: FilterValue): void {\n const filterNodeMethod = this.filterNodeMethod\n const lazy = this.lazy\n const traverse = async function (node: TreeStore | Node) {\n const childNodes = (node as TreeStore).root\n ? (node as TreeStore).root.childNodes\n : (node as Node).childNodes\n\n for (const [index, child] of childNodes.entries()) {\n child.visible = !!filterNodeMethod?.call(\n child,\n value,\n child.data,\n child\n )\n\n if (index % 80 === 0 && index > 0) {\n await nextTick()\n }\n await traverse(child)\n }\n\n if (!(node as Node).visible && childNodes.length) {\n let allHidden = true\n allHidden = !childNodes.some((child) => child.visible)\n\n if ((node as TreeStore).root) {\n ;(node as TreeStore).root.visible = allHidden === false\n } else {\n ;(node as Node).visible = allHidden === false\n }\n }\n if (!value) return\n\n if ((node as Node).visible && !(node as Node).isLeaf) {\n if (!lazy || (node as Node).loaded) {\n ;(node as Node).expand()\n }\n }\n }\n\n traverse(this)\n }\n\n setData(newVal: TreeData): void {\n const instanceChanged = newVal !== this.root.data\n if (instanceChanged) {\n this.nodesMap = {}\n this.root.setData(newVal)\n this._initDefaultCheckedNodes()\n this.setCurrentNodeKey(this.currentNodeKey)\n } else {\n this.root.updateChildren()\n }\n }\n\n getNode(data: TreeKey | TreeNodeData | Node): Node {\n if (data instanceof Node) return data\n const key = isObject(data) ? getNodeKey(this.key, data) : data\n return this.nodesMap[key] || null\n }\n\n insertBefore(\n data: TreeNodeData,\n refData: TreeKey | TreeNodeData | Node\n ): void {\n const refNode = this.getNode(refData)\n refNode.parent?.insertBefore({ data }, refNode)\n }\n\n insertAfter(\n data: TreeNodeData,\n refData: TreeKey | TreeNodeData | Node\n ): void {\n const refNode = this.getNode(refData)\n refNode.parent?.insertAfter({ data }, refNode)\n }\n\n remove(data: TreeNodeData | Node): void {\n const node = this.getNode(data)\n\n if (node && node.parent) {\n if (node === this.currentNode) {\n this.currentNode = null\n }\n node.parent.removeChild(node)\n }\n }\n\n append(data: TreeNodeData, parentData: TreeNodeData | TreeKey | Node): void {\n const parentNode = !isPropAbsent(parentData)\n ? this.getNode(parentData)\n : this.root\n\n if (parentNode) {\n parentNode.insertChild({ data })\n }\n }\n\n _initDefaultCheckedNodes(): void {\n const defaultCheckedKeys = this.defaultCheckedKeys || []\n const nodesMap = this.nodesMap\n\n defaultCheckedKeys.forEach((checkedKey) => {\n const node = nodesMap[checkedKey]\n\n if (node) {\n node.setChecked(true, !this.checkStrictly)\n }\n })\n }\n\n _initDefaultCheckedNode(node: Node): void {\n const defaultCheckedKeys = this.defaultCheckedKeys || []\n\n if (!isNil(node.key) && defaultCheckedKeys.includes(node.key)) {\n node.setChecked(true, !this.checkStrictly)\n }\n }\n\n setDefaultCheckedKey(newVal: TreeKey[]): void {\n if (newVal !== this.defaultCheckedKeys) {\n this.defaultCheckedKeys = newVal\n this._initDefaultCheckedNodes()\n }\n }\n\n registerNode(node: Node): void {\n const key = this.key\n if (!node || !node.data) return\n\n if (!key) {\n this.nodesMap[node.id] = node\n } else {\n const nodeKey = node.key\n if (!isNil(nodeKey)) this.nodesMap[nodeKey] = node\n }\n }\n\n deregisterNode(node: Node): void {\n const key = this.key\n if (!key || !node || !node.data) return\n\n node.childNodes.forEach((child) => {\n this.deregisterNode(child)\n })\n\n delete this.nodesMap[node.key!]\n }\n\n getCheckedNodes(\n leafOnly = false,\n includeHalfChecked = false\n ): TreeNodeData[] {\n const checkedNodes: TreeNodeData[] = []\n const traverse = function (node: TreeStore | Node) {\n const childNodes = (node as TreeStore).root\n ? (node as TreeStore).root.childNodes\n : (node as Node).childNodes\n\n childNodes.forEach((child) => {\n if (\n (child.checked || (includeHalfChecked && child.indeterminate)) &&\n (!leafOnly || (leafOnly && child.isLeaf))\n ) {\n checkedNodes.push(child.data)\n }\n\n traverse(child)\n })\n }\n\n traverse(this)\n\n return checkedNodes\n }\n\n getCheckedKeys(leafOnly = false): TreeKey[] {\n return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key])\n }\n\n getHalfCheckedNodes(): TreeNodeData[] {\n const nodes: TreeNodeData[] = []\n const traverse = function (node: TreeStore | Node) {\n const childNodes = (node as TreeStore).root\n ? (node as TreeStore).root.childNodes\n : (node as Node).childNodes\n\n childNodes.forEach((child) => {\n if (child.indeterminate) {\n nodes.push(child.data)\n }\n\n traverse(child)\n })\n }\n\n traverse(this)\n\n return nodes\n }\n\n getHalfCheckedKeys(): TreeKey[] {\n return this.getHalfCheckedNodes().map((data) => (data || {})[this.key])\n }\n\n _getAllNodes(): Node[] {\n const allNodes: Node[] = []\n const nodesMap = this.nodesMap\n for (const nodeKey in nodesMap) {\n if (hasOwn(nodesMap, nodeKey)) {\n allNodes.push(nodesMap[nodeKey])\n }\n }\n\n return allNodes\n }\n\n updateChildren(key: TreeKey, data: TreeData): void {\n const node = this.nodesMap[key]\n if (!node) return\n const childNodes = node.childNodes\n for (let i = childNodes.length - 1; i >= 0; i--) {\n const child = childNodes[i]\n this.remove(child.data)\n }\n for (let i = 0, j = data.length; i < j; i++) {\n const child = data[i]\n this.append(child, node.data)\n }\n }\n\n _setCheckedKeys(\n key: TreeKey,\n leafOnly = false,\n checkedKeys: { [key: string]: boolean }\n ) {\n const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level)\n const cache: Record<TreeKey, boolean> = Object.create(null)\n const keys = Object.keys(checkedKeys)\n allNodes.forEach((node) => node.setChecked(false, false))\n const cacheCheckedChild = (node: Node) => {\n node.childNodes.forEach((child) => {\n cache[child.data[key]] = true\n if (child.childNodes?.length) {\n cacheCheckedChild(child)\n }\n })\n }\n for (let i = 0, j = allNodes.length; i < j; i++) {\n const node = allNodes[i]\n const nodeKey: string = node.data[key].toString()\n const checked = keys.includes(nodeKey)\n if (!checked) {\n if (node.checked && !cache[nodeKey]) {\n node.setChecked(false, false)\n }\n continue\n }\n\n if (node.childNodes.length) {\n cacheCheckedChild(node)\n }\n\n if (node.isLeaf || this.checkStrictly) {\n node.setChecked(true, false)\n continue\n }\n node.setChecked(true, true)\n\n if (leafOnly) {\n node.setChecked(false, false)\n const traverse = function (node: Node): void {\n const childNodes = node.childNodes\n childNodes.forEach((child) => {\n if (!child.isLeaf) {\n child.setChecked(false, false)\n }\n traverse(child)\n })\n }\n traverse(node)\n }\n }\n }\n\n setCheckedNodes(array: Node[], leafOnly = false): void {\n const key = this.key\n const checkedKeys: Record<TreeKey, boolean> = {}\n array.forEach((item) => {\n checkedKeys[((item || {}) as any)[key]] = true\n })\n\n this._setCheckedKeys(key, leafOnly, checkedKeys)\n }\n\n setCheckedKeys(keys: TreeKey[], leafOnly = false): void {\n this.defaultCheckedKeys = keys\n const key = this.key\n const checkedKeys: Record<TreeKey, boolean> = {}\n keys.forEach((key) => {\n checkedKeys[key] = true\n })\n\n this._setCheckedKeys(key, leafOnly, checkedKeys)\n }\n\n setDefaultExpandedKeys(keys: TreeKey[]) {\n keys = keys || []\n this.defaultExpandedKeys = keys\n keys.forEach((key) => {\n const node = this.getNode(key)\n if (node) node.expand(null, this.autoExpandParent)\n })\n }\n\n setChecked(\n data: TreeKey | TreeNodeData,\n checked: boolean,\n deep: boolean\n ): void {\n const node = this.getNode(data)\n\n if (node) {\n node.setChecked(!!checked, deep)\n }\n }\n\n getCurrentNode() {\n return this.currentNode\n }\n\n setCurrentNode(currentNode: Node): void {\n const prevCurrentNode = this.currentNode\n if (prevCurrentNode) {\n prevCurrentNode.isCurrent = false\n }\n this.currentNode = currentNode\n this.currentNode.isCurrent = true\n }\n\n setUserCurrentNode(node: Node, shouldAutoExpandParent = true): void {\n const key = (node as any)[this.key]\n const currNode = this.nodesMap[key]\n this.setCurrentNode(currNode)\n if (\n shouldAutoExpandParent &&\n this.currentNode &&\n this.currentNode.level > 1\n ) {\n this.currentNode.parent?.expand(null, true)\n }\n }\n\n setCurrentNodeKey(key: TreeKey | null, shouldAutoExpandParent = true): void {\n this.currentNodeKey = key\n if (isPropAbsent(key)) {\n this.currentNode && (this.currentNode.isCurrent = false)\n this.currentNode = null\n return\n }\n const node = this.getNode(key)\n if (node) {\n this.setCurrentNode(node)\n if (\n shouldAutoExpandParent &&\n this.currentNode &&\n this.currentNode.level > 1\n ) {\n this.currentNode.parent?.expand(null, true)\n }\n }\n }\n}\n"],"names":["node","key"],"mappings":"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"}