element-plus
Version:
A Component Library for Vue 3
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"node.mjs","sources":["../../../../../../packages/components/cascader-panel/src/node.ts"],"sourcesContent":["import { isArray, isEmpty, isFunction, isUndefined } from '@element-plus/utils'\n\nimport type {\n CascaderConfig,\n CascaderNodePathValue,\n CascaderNodeValue,\n CascaderOption,\n} from './types'\n\ntype ChildrenData = CascaderOption[] | undefined\n\nlet uid = 0\n\nconst calculatePathNodes = (node: Node) => {\n const nodes = [node]\n let { parent } = node\n\n while (parent) {\n nodes.unshift(parent)\n parent = parent.parent\n }\n\n return nodes\n}\n\nclass Node {\n readonly uid: number = uid++\n readonly level: number\n readonly value: CascaderNodeValue\n readonly label: string\n readonly pathNodes: Node[]\n readonly pathValues: CascaderNodePathValue\n readonly pathLabels: string[]\n\n childrenData: ChildrenData\n children: Node[]\n text: string\n loaded: boolean\n /**\n * Is it checked\n *\n * @default false\n */\n checked = false\n /**\n * Used to indicate the intermediate state of unchecked and fully checked child nodes\n *\n * @default false\n */\n indeterminate = false\n /**\n * Loading Status\n *\n * @default false\n */\n loading = false\n\n constructor(\n readonly data: CascaderOption,\n readonly config: CascaderConfig,\n readonly parent?: Node,\n readonly root = false\n ) {\n const { value: valueKey, label: labelKey, children: childrenKey } = config\n\n const childrenData = data[childrenKey] as ChildrenData\n const pathNodes = calculatePathNodes(this)\n\n this.level = root ? 0 : parent ? parent.level + 1 : 1\n this.value = data[valueKey] as CascaderNodeValue\n this.label = data[labelKey] as string\n this.pathNodes = pathNodes\n this.pathValues = pathNodes.map((node) => node.value)\n this.pathLabels = pathNodes.map((node) => node.label)\n this.childrenData = childrenData\n this.children = (childrenData || []).map(\n (child) => new Node(child, config, this)\n )\n this.loaded = !config.lazy || this.isLeaf || !isEmpty(childrenData)\n this.text = ''\n }\n\n get isDisabled(): boolean {\n const { data, parent, config } = this\n const { disabled, checkStrictly } = config\n const isDisabled = isFunction(disabled)\n ? disabled(data, this)\n : !!data[disabled]\n return isDisabled || (!checkStrictly && !!parent?.isDisabled)\n }\n\n get isLeaf(): boolean {\n const { data, config, childrenData, loaded } = this\n const { lazy, leaf } = config\n const isLeaf = isFunction(leaf) ? leaf(data, this) : data[leaf]\n\n return isUndefined(isLeaf)\n ? lazy && !loaded\n ? false\n : !(isArray(childrenData) && childrenData.length)\n : !!isLeaf\n }\n\n get valueByOption() {\n return this.config.emitPath ? this.pathValues : this.value\n }\n\n appendChild(childData: CascaderOption) {\n const { childrenData, children } = this\n const node = new Node(childData, this.config, this)\n\n if (isArray(childrenData)) {\n childrenData.push(childData)\n } else {\n this.childrenData = [childData]\n }\n\n children.push(node)\n\n return node\n }\n\n calcText(allLevels: boolean, separator: string) {\n const text = allLevels ? this.pathLabels.join(separator) : this.label\n this.text = text\n return text\n }\n\n broadcast(checked: boolean) {\n this.children.forEach((child) => {\n if (child) {\n // bottom up\n child.broadcast(checked)\n child.onParentCheck?.(checked)\n }\n })\n }\n\n emit() {\n const { parent } = this\n if (parent) {\n parent.onChildCheck?.()\n parent.emit()\n }\n }\n\n onParentCheck(checked: boolean) {\n if (!this.isDisabled) {\n this.setCheckState(checked)\n }\n }\n\n onChildCheck() {\n const { children } = this\n const validChildren = children.filter((child) => !child.isDisabled)\n const checked = validChildren.length\n ? validChildren.every((child) => child.checked)\n : false\n\n this.setCheckState(checked)\n }\n\n setCheckState(checked: boolean) {\n const totalNum = this.children.length\n const checkedNum = this.children.reduce((c, p) => {\n const num = p.checked ? 1 : p.indeterminate ? 0.5 : 0\n return c + num\n }, 0)\n\n this.checked =\n this.loaded &&\n this.children\n .filter((child) => !child.isDisabled)\n .every((child) => child.loaded && child.checked) &&\n checked\n this.indeterminate =\n this.loaded && checkedNum !== totalNum && checkedNum > 0\n }\n\n doCheck(checked: boolean) {\n if (this.checked === checked) return\n\n const { checkStrictly, multiple } = this.config\n\n if (checkStrictly || !multiple) {\n this.checked = checked\n } else {\n // bottom up to unify the calculation of the indeterminate state\n this.broadcast(checked)\n this.setCheckState(checked)\n this.emit()\n }\n }\n}\n\nexport default Node\n"],"names":[],"mappings":"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"}