element-plus
Version:
A Component Library for Vue 3
1 lines • 21.4 kB
Source Map (JSON)
{"version":3,"file":"node.mjs","sources":["../../../../../../../packages/components/tree/src/model/node.ts"],"sourcesContent":["import { reactive } from 'vue'\nimport { hasOwn } from '@vue/shared'\nimport { markNodeData, NODE_KEY } from './util'\nimport type TreeStore from './tree-store'\n\nimport type { Nullable } from '@element-plus/utils/types'\nimport type {\n TreeNodeOptions,\n TreeNodeData,\n TreeKey,\n FakeNode,\n TreeNodeLoadedDefaultProps,\n TreeNodeChildState,\n} from '../tree.type'\n\nexport const getChildState = (node: Node[]): TreeNodeChildState => {\n let all = true\n let none = true\n let allWithoutDisable = true\n for (let i = 0, j = node.length; i < j; i++) {\n const n = node[i]\n if (n.checked !== true || n.indeterminate) {\n all = false\n if (!n.disabled) {\n allWithoutDisable = false\n }\n }\n if (n.checked !== false || n.indeterminate) {\n none = false\n }\n }\n\n return { all, none, allWithoutDisable, half: !all && !none }\n}\n\nconst reInitChecked = function (node: Node): void {\n if (node.childNodes.length === 0) return\n\n const { all, none, half } = getChildState(node.childNodes)\n if (all) {\n node.checked = true\n node.indeterminate = false\n } else if (half) {\n node.checked = false\n node.indeterminate = true\n } else if (none) {\n node.checked = false\n node.indeterminate = false\n }\n\n const parent = node.parent\n if (!parent || parent.level === 0) return\n\n if (!node.store.checkStrictly) {\n reInitChecked(parent)\n }\n}\n\nconst getPropertyFromData = function (node: Node, prop: string): any {\n const props = node.store.props\n const data = node.data || {}\n const config = props[prop]\n\n if (typeof config === 'function') {\n return config(data, node)\n } else if (typeof config === 'string') {\n return data[config]\n } else if (typeof config === 'undefined') {\n const dataProp = data[prop]\n return dataProp === undefined ? '' : dataProp\n }\n}\n\nlet nodeIdSeed = 0\n\nclass Node {\n id: number\n text: string\n checked: boolean\n indeterminate: boolean\n data: TreeNodeData\n expanded: boolean\n parent: Node\n visible: boolean\n isCurrent: boolean\n store: TreeStore\n isLeafByUser: boolean\n isLeaf: boolean\n canFocus: boolean\n\n level: number\n loaded: boolean\n childNodes: Node[]\n loading: boolean\n\n constructor(options: TreeNodeOptions) {\n this.id = nodeIdSeed++\n this.text = null\n this.checked = false\n this.indeterminate = false\n this.data = null\n this.expanded = false\n this.parent = null\n this.visible = true\n this.isCurrent = false\n this.canFocus = false\n\n for (const name in options) {\n if (hasOwn(options, name)) {\n this[name] = options[name]\n }\n }\n\n // internal\n this.level = 0\n this.loaded = false\n this.childNodes = []\n this.loading = false\n\n if (this.parent) {\n this.level = this.parent.level + 1\n }\n }\n\n initialize() {\n const store = this.store\n if (!store) {\n throw new Error('[Node]store is required!')\n }\n store.registerNode(this)\n\n const props = store.props\n if (props && typeof props.isLeaf !== 'undefined') {\n const isLeaf = getPropertyFromData(this, 'isLeaf')\n if (typeof isLeaf === 'boolean') {\n this.isLeafByUser = isLeaf\n }\n }\n\n if (store.lazy !== true && this.data) {\n this.setData(this.data)\n\n if (store.defaultExpandAll) {\n this.expanded = true\n this.canFocus = true\n }\n } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n this.expand()\n }\n if (!Array.isArray(this.data)) {\n markNodeData(this, this.data)\n }\n if (!this.data) return\n\n const defaultExpandedKeys = store.defaultExpandedKeys\n const key = store.key\n\n if (\n key &&\n defaultExpandedKeys &&\n defaultExpandedKeys.indexOf(this.key) !== -1\n ) {\n this.expand(null, store.autoExpandParent)\n }\n\n if (\n key &&\n store.currentNodeKey !== undefined &&\n this.key === store.currentNodeKey\n ) {\n store.currentNode = this\n store.currentNode.isCurrent = true\n }\n\n if (store.lazy) {\n store._initDefaultCheckedNode(this)\n }\n\n this.updateLeafState()\n if (this.parent && (this.level === 1 || this.parent.expanded === true))\n this.canFocus = true\n }\n\n setData(data: TreeNodeData): void {\n if (!Array.isArray(data)) {\n markNodeData(this, data)\n }\n\n this.data = data\n this.childNodes = []\n\n let children\n if (this.level === 0 && this.data instanceof Array) {\n children = this.data\n } else {\n children = getPropertyFromData(this, 'children') || []\n }\n\n for (let i = 0, j = children.length; i < j; i++) {\n this.insertChild({ data: children[i] })\n }\n }\n\n get label(): string {\n return getPropertyFromData(this, 'label')\n }\n\n get key(): TreeKey {\n const nodeKey = this.store.key\n if (this.data) return this.data[nodeKey]\n return null\n }\n\n get disabled(): boolean {\n return getPropertyFromData(this, 'disabled')\n }\n\n get nextSibling(): Nullable<Node> {\n const parent = this.parent\n if (parent) {\n const index = parent.childNodes.indexOf(this)\n if (index > -1) {\n return parent.childNodes[index + 1]\n }\n }\n return null\n }\n\n get previousSibling(): Nullable<Node> {\n const parent = this.parent\n if (parent) {\n const index = parent.childNodes.indexOf(this)\n if (index > -1) {\n return index > 0 ? parent.childNodes[index - 1] : null\n }\n }\n return null\n }\n\n contains(target: Node, deep = true): boolean {\n return (this.childNodes || []).some(\n (child) => child === target || (deep && child.contains(target))\n )\n }\n\n remove(): void {\n const parent = this.parent\n if (parent) {\n parent.removeChild(this)\n }\n }\n\n insertChild(child?: FakeNode | Node, index?: number, batch?: boolean): void {\n if (!child) throw new Error('InsertChild error: child is required.')\n\n if (!(child instanceof Node)) {\n if (!batch) {\n const children = this.getChildren(true)\n if (children.indexOf(child.data) === -1) {\n if (typeof index === 'undefined' || index < 0) {\n children.push(child.data)\n } else {\n children.splice(index, 0, child.data)\n }\n }\n }\n Object.assign(child, {\n parent: this,\n store: this.store,\n })\n child = reactive(new Node(child as TreeNodeOptions))\n if (child instanceof Node) {\n child.initialize()\n }\n }\n\n ;(child as Node).level = this.level + 1\n\n if (typeof index === 'undefined' || index < 0) {\n this.childNodes.push(child as Node)\n } else {\n this.childNodes.splice(index, 0, child as Node)\n }\n\n this.updateLeafState()\n }\n\n insertBefore(child: FakeNode | Node, ref: Node): void {\n let index\n if (ref) {\n index = this.childNodes.indexOf(ref)\n }\n this.insertChild(child, index)\n }\n\n insertAfter(child: FakeNode | Node, ref: Node): void {\n let index\n if (ref) {\n index = this.childNodes.indexOf(ref)\n if (index !== -1) index += 1\n }\n this.insertChild(child, index)\n }\n\n removeChild(child: Node): void {\n const children = this.getChildren() || []\n const dataIndex = children.indexOf(child.data)\n if (dataIndex > -1) {\n children.splice(dataIndex, 1)\n }\n\n const index = this.childNodes.indexOf(child)\n\n if (index > -1) {\n this.store && this.store.deregisterNode(child)\n child.parent = null\n this.childNodes.splice(index, 1)\n }\n\n this.updateLeafState()\n }\n\n removeChildByData(data: TreeNodeData): void {\n let targetNode: Node = null\n\n for (let i = 0; i < this.childNodes.length; i++) {\n if (this.childNodes[i].data === data) {\n targetNode = this.childNodes[i]\n break\n }\n }\n\n if (targetNode) {\n this.removeChild(targetNode)\n }\n }\n\n expand(callback?: () => void, expandParent?: boolean): void {\n const done = (): void => {\n if (expandParent) {\n let parent = this.parent\n while (parent.level > 0) {\n parent.expanded = true\n parent = parent.parent\n }\n }\n this.expanded = true\n if (callback) callback()\n this.childNodes.forEach((item) => {\n item.canFocus = true\n })\n }\n\n if (this.shouldLoadData()) {\n this.loadData((data) => {\n if (Array.isArray(data)) {\n if (this.checked) {\n this.setChecked(true, true)\n } else if (!this.store.checkStrictly) {\n reInitChecked(this)\n }\n done()\n }\n })\n } else {\n done()\n }\n }\n\n doCreateChildren(\n array: TreeNodeData[],\n defaultProps: TreeNodeLoadedDefaultProps = {}\n ): void {\n array.forEach((item) => {\n this.insertChild(\n Object.assign({ data: item }, defaultProps),\n undefined,\n true\n )\n })\n }\n\n collapse(): void {\n this.expanded = false\n this.childNodes.forEach((item) => {\n item.canFocus = false\n })\n }\n\n shouldLoadData(): boolean {\n return this.store.lazy === true && this.store.load && !this.loaded\n }\n\n updateLeafState(): void {\n if (\n this.store.lazy === true &&\n this.loaded !== true &&\n typeof this.isLeafByUser !== 'undefined'\n ) {\n this.isLeaf = this.isLeafByUser\n return\n }\n const childNodes = this.childNodes\n if (\n !this.store.lazy ||\n (this.store.lazy === true && this.loaded === true)\n ) {\n this.isLeaf = !childNodes || childNodes.length === 0\n return\n }\n this.isLeaf = false\n }\n\n setChecked(\n value?: boolean | string,\n deep?: boolean,\n recursion?: boolean,\n passValue?: boolean\n ) {\n this.indeterminate = value === 'half'\n this.checked = value === true\n\n if (this.store.checkStrictly) return\n\n if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n const { all, allWithoutDisable } = getChildState(this.childNodes)\n\n if (!this.isLeaf && !all && allWithoutDisable) {\n this.checked = false\n value = false\n }\n\n const handleDescendants = (): void => {\n if (deep) {\n const childNodes = this.childNodes\n for (let i = 0, j = childNodes.length; i < j; i++) {\n const child = childNodes[i]\n passValue = passValue || value !== false\n const isCheck = child.disabled ? child.checked : passValue\n child.setChecked(isCheck, deep, true, passValue)\n }\n const { half, all } = getChildState(childNodes)\n if (!all) {\n this.checked = all\n this.indeterminate = half\n }\n }\n }\n\n if (this.shouldLoadData()) {\n // Only work on lazy load data.\n this.loadData(\n () => {\n handleDescendants()\n reInitChecked(this)\n },\n {\n checked: value !== false,\n }\n )\n return\n } else {\n handleDescendants()\n }\n }\n\n const parent = this.parent\n if (!parent || parent.level === 0) return\n\n if (!recursion) {\n reInitChecked(parent)\n }\n }\n\n getChildren(forceInit = false): TreeNodeData | TreeNodeData[] {\n // this is data\n if (this.level === 0) return this.data\n const data = this.data\n if (!data) return null\n\n const props = this.store.props\n let children = 'children'\n if (props) {\n children = props.children || 'children'\n }\n\n if (data[children] === undefined) {\n data[children] = null\n }\n\n if (forceInit && !data[children]) {\n data[children] = []\n }\n\n return data[children]\n }\n\n updateChildren(): void {\n const newData = (this.getChildren() || []) as TreeNodeData[]\n const oldData = this.childNodes.map((node) => node.data)\n\n const newDataMap = {}\n const newNodes = []\n\n newData.forEach((item, index) => {\n const key = item[NODE_KEY]\n const isNodeExists =\n !!key && oldData.findIndex((data) => data[NODE_KEY] === key) >= 0\n if (isNodeExists) {\n newDataMap[key] = { index, data: item }\n } else {\n newNodes.push({ index, data: item })\n }\n })\n\n if (!this.store.lazy) {\n oldData.forEach((item) => {\n if (!newDataMap[item[NODE_KEY]]) this.removeChildByData(item)\n })\n }\n\n newNodes.forEach(({ index, data }) => {\n this.insertChild({ data }, index)\n })\n\n this.updateLeafState()\n }\n\n loadData(\n callback: (node: Node) => void,\n defaultProps: TreeNodeLoadedDefaultProps = {}\n ) {\n if (\n this.store.lazy === true &&\n this.store.load &&\n !this.loaded &&\n (!this.loading || Object.keys(defaultProps).length)\n ) {\n this.loading = true\n\n const resolve = (children) => {\n this.loaded = true\n this.loading = false\n this.childNodes = []\n\n this.doCreateChildren(children, defaultProps)\n\n this.updateLeafState()\n if (callback) {\n callback.call(this, children)\n }\n }\n\n this.store.load(this, resolve)\n } else {\n if (callback) {\n callback.call(this)\n }\n }\n }\n}\n\nexport default Node\n"],"names":[],"mappings":"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"}