element-plus
Version:
A Component Library for Vue 3
1 lines • 10.2 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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"}