element-plus
Version:
A Component Library for Vue 3
1 lines • 32.5 kB
Source Map (JSON)
{"version":3,"file":"node.mjs","sources":["../../../../../../../packages/components/tree/src/model/node.ts"],"sourcesContent":["import { reactive } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport {\n hasOwn,\n isArray,\n isBoolean,\n isFunction,\n isString,\n isUndefined,\n} from '@element-plus/utils'\nimport { NODE_KEY, markNodeData } from './util'\n\nimport type TreeStore from './tree-store'\nimport type { Nullable } from '@element-plus/utils'\nimport type {\n FakeNode,\n TreeKey,\n TreeNodeChildState,\n TreeNodeData,\n TreeNodeLoadedDefaultProps,\n TreeNodeOptions,\n} from '../tree.type'\n\nexport const getChildState = (node: Node[]): TreeNodeChildState => {\n let all = true\n let none = true\n let allWithoutDisable = true\n let isEffectivelyChecked = 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 if (!n.isEffectivelyChecked) {\n isEffectivelyChecked = false\n }\n }\n\n return {\n all,\n none,\n allWithoutDisable,\n half: !all && !none,\n isEffectivelyChecked,\n }\n}\n\nconst reInitChecked = function (node: Node): void {\n if (node.childNodes.length === 0 || node.loading) {\n node.isEffectivelyChecked = node.disabled || node.checked\n return\n }\n\n const { all, none, half, isEffectivelyChecked } = getChildState(\n node.childNodes\n )\n node.isEffectivelyChecked = isEffectivelyChecked\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 as any)[prop]\n\n if (isFunction(config)) {\n return config(data, node)\n } else if (isString(config)) {\n return data[config]\n } else if (isUndefined(config)) {\n const dataProp = data[prop]\n return isUndefined(dataProp) ? '' : dataProp\n }\n}\n\nconst setCanFocus = function (childNodes: Node[], focus: boolean): void {\n childNodes.forEach((item) => {\n item.canFocus = focus\n setCanFocus(item.childNodes, focus)\n })\n}\n\nlet nodeIdSeed = 0\n\nclass Node {\n id: number\n text: string | null\n checked: boolean\n indeterminate: boolean\n data: TreeNodeData\n expanded: boolean\n parent: Node | null\n visible: boolean\n isCurrent: boolean\n store!: TreeStore\n isLeafByUser: boolean | undefined = undefined\n isLeaf: boolean | undefined = undefined\n canFocus: boolean\n\n level: number\n loaded: boolean\n childNodes: Node[]\n loading: boolean\n\n /**\n * Determines whether the current tree node is effectively checked.\n *\n * Rules:\n * 1. A disabled leaf node is always considered checked.\n * 2. A non-disabled leaf node reflects its actual checked state.\n * 3. A non-leaf node is considered checked only when:\n * - All of its child nodes are effectively checked, and\n * - Each child follows the same evaluation rules:\n * - Disabled leaf nodes follow rule #1.\n * - Non-leaf child nodes are recursively evaluated under this rule (#3).\n */\n isEffectivelyChecked: boolean = false\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 as unknown as TreeNodeData\n this.expanded = false\n this.parent = null as Node | 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 (isBoolean(isLeaf)) {\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 (\n this.level > 0 &&\n store.lazy &&\n store.defaultExpandAll &&\n !this.isLeafByUser\n ) {\n this.expand()\n }\n if (!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 !isNil(this.key) &&\n defaultExpandedKeys &&\n defaultExpandedKeys.includes(this.key)\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 && (store.currentNode.isCurrent = false)\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.level === 1 || this.parent?.expanded === true) this.canFocus = true\n }\n\n setData(data: TreeNodeData): void {\n if (!isArray(data)) {\n markNodeData(this, data)\n }\n\n this.data = data\n this.childNodes = []\n\n let children\n if (this.level === 0 && isArray(this.data)) {\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 | null | undefined {\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?.includes(child.data)) {\n if (isUndefined(index) || 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 (isUndefined(index) || 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 | null): void {\n const targetNode = this.childNodes.find((child) => child.data === data)\n\n if (targetNode) {\n this.removeChild(targetNode)\n }\n }\n\n expand(callback?: (() => void) | null, expandParent?: boolean): void {\n const done = () => {\n if (expandParent) {\n let parent = this.parent\n while (parent && parent.level > 0) {\n parent.expanded = true\n parent = parent.parent\n }\n }\n this.expanded = true\n if (callback) callback()\n setCanFocus(this.childNodes, true)\n }\n\n if (this.shouldLoadData()) {\n this.loadData((data) => {\n if (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 setCanFocus(this.childNodes, false)\n }\n\n shouldLoadData() {\n return Boolean(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 this.isEffectivelyChecked = this.isLeaf && this.disabled\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 this.isEffectivelyChecked = this.isLeaf && this.disabled\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 this.isEffectivelyChecked =\n !this.childNodes.length && (this.disabled || this.checked)\n\n if (this.store.checkStrictly) return\n\n if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\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 =\n child.disabled && child.isLeaf ? child.checked : passValue\n child.setChecked(isCheck, deep, true, passValue)\n }\n const { half, all, isEffectivelyChecked } = getChildState(childNodes)\n if (!all) {\n this.checked = all\n this.indeterminate = half\n }\n this.isEffectivelyChecked = !this.childNodes.length\n ? this.disabled || this.checked\n : isEffectivelyChecked\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[] | null {\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 (isUndefined(data[children])) {\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: Record<TreeKey, TreeNodeData> = {}\n const newNodes: TreeNodeData[] = []\n\n newData.forEach((item, index) => {\n const key = item[NODE_KEY]\n const isNodeExists =\n !!key && oldData.some((data) => data?.[NODE_KEY] === key)\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: (data?: TreeNodeData[]) => 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: TreeNodeData[]) => {\n this.childNodes = []\n\n this.doCreateChildren(children, defaultProps)\n this.loaded = true\n this.loading = false\n\n this.updateLeafState()\n if (callback) {\n callback.call(this, children)\n }\n }\n const reject = () => {\n this.loading = false\n }\n\n this.store.load(this, resolve, reject)\n } else {\n if (callback) {\n callback.call(this)\n }\n }\n }\n\n eachNode(callback: (node: Node) => void) {\n const arr: Node[] = [this]\n while (arr.length) {\n const node = arr.shift()!\n arr.unshift(...node.childNodes)\n callback(node)\n }\n }\n\n reInitChecked() {\n if (this.store.checkStrictly) return\n reInitChecked(this)\n }\n}\n\nexport default Node\n"],"names":[],"mappings":"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"}