element-plus
Version:
A Component Library for Vue 3
1 lines • 4.01 kB
Source Map (JSON)
{"version":3,"file":"store.mjs","names":[],"sources":["../../../../../../packages/components/cascader-panel/src/store.ts"],"sourcesContent":["import { isEqual } from 'lodash-unified'\nimport { isPropAbsent } from '@element-plus/utils'\nimport Node from './node'\n\nimport type { Nullable } from '@element-plus/utils'\nimport type {\n CascaderConfig,\n CascaderNodePathValue,\n CascaderNodeValue,\n CascaderOption,\n} from './types'\n\nconst flatNodes = (nodes: Node[], leafOnly: boolean) => {\n return nodes.reduce((res, node) => {\n if (node.isLeaf) {\n res.push(node)\n } else {\n !leafOnly && res.push(node)\n res = res.concat(flatNodes(node.children, leafOnly))\n }\n return res\n }, [] as Node[])\n}\n\nexport default class Store {\n readonly nodes: Node[]\n readonly allNodes: Node[]\n readonly leafNodes: Node[]\n\n constructor(\n data: CascaderOption[],\n readonly config: CascaderConfig\n ) {\n const nodes = (data || []).map(\n (nodeData) => new Node(nodeData, this.config)\n )\n this.nodes = nodes\n this.allNodes = flatNodes(nodes, false)\n this.leafNodes = flatNodes(nodes, true)\n }\n\n getNodes() {\n return this.nodes\n }\n\n getFlattedNodes(leafOnly: boolean) {\n return leafOnly ? this.leafNodes : this.allNodes\n }\n\n appendNode(nodeData: CascaderOption, parentNode?: Node) {\n const node = parentNode\n ? parentNode.appendChild(nodeData)\n : new Node(nodeData, this.config)\n\n if (!parentNode) this.nodes.push(node)\n\n this.appendAllNodesAndLeafNodes(node)\n }\n\n appendNodes(nodeDataList: CascaderOption[], parentNode: Node) {\n if (nodeDataList.length > 0) {\n nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode))\n } else {\n parentNode && parentNode.isLeaf && this.leafNodes.push(parentNode)\n }\n }\n\n appendAllNodesAndLeafNodes(node: Node) {\n this.allNodes.push(node)\n node.isLeaf && this.leafNodes.push(node)\n if (node.children) {\n node.children.forEach((subNode) => {\n this.appendAllNodesAndLeafNodes(subNode)\n })\n }\n }\n\n // when checkStrictly, leaf node first\n getNodeByValue(\n value: CascaderNodeValue | CascaderNodePathValue,\n leafOnly = false\n ): Nullable<Node> {\n if (isPropAbsent(value)) return null\n\n const node = this.getFlattedNodes(leafOnly).find(\n (node) => isEqual(node.value, value) || isEqual(node.pathValues, value)\n )\n\n return node || null\n }\n\n getSameNode(node: Node): Nullable<Node> {\n if (!node) return null\n\n const node_ = this.getFlattedNodes(false).find(\n ({ value, level }) => isEqual(node.value, value) && node.level === level\n )\n\n return node_ || null\n }\n}\n"],"mappings":";;;;AAYA,MAAM,aAAa,OAAe,aAAsB;CACtD,OAAO,MAAM,QAAQ,KAAK,SAAS;EACjC,IAAI,KAAK,QACP,IAAI,KAAK,KAAK;OACT;GACL,CAAC,YAAY,IAAI,KAAK,KAAK;GAC3B,MAAM,IAAI,OAAO,UAAU,KAAK,UAAU,SAAS,CAAC;;EAEtD,OAAO;IACN,EAAE,CAAW;;AAGlB,IAAqB,QAArB,MAA2B;CAKzB,YACE,MACA,QACA;EADS,KAAA,SAAA;EAET,MAAM,SAAS,QAAQ,EAAE,EAAE,KACxB,aAAa,IAAI,KAAK,UAAU,KAAK,OAAO,CAC9C;EACD,KAAK,QAAQ;EACb,KAAK,WAAW,UAAU,OAAO,MAAM;EACvC,KAAK,YAAY,UAAU,OAAO,KAAK;;CAGzC,WAAW;EACT,OAAO,KAAK;;CAGd,gBAAgB,UAAmB;EACjC,OAAO,WAAW,KAAK,YAAY,KAAK;;CAG1C,WAAW,UAA0B,YAAmB;EACtD,MAAM,OAAO,aACT,WAAW,YAAY,SAAS,GAChC,IAAI,KAAK,UAAU,KAAK,OAAO;EAEnC,IAAI,CAAC,YAAY,KAAK,MAAM,KAAK,KAAK;EAEtC,KAAK,2BAA2B,KAAK;;CAGvC,YAAY,cAAgC,YAAkB;EAC5D,IAAI,aAAa,SAAS,GACxB,aAAa,SAAS,aAAa,KAAK,WAAW,UAAU,WAAW,CAAC;OAEzE,cAAc,WAAW,UAAU,KAAK,UAAU,KAAK,WAAW;;CAItE,2BAA2B,MAAY;EACrC,KAAK,SAAS,KAAK,KAAK;EACxB,KAAK,UAAU,KAAK,UAAU,KAAK,KAAK;EACxC,IAAI,KAAK,UACP,KAAK,SAAS,SAAS,YAAY;GACjC,KAAK,2BAA2B,QAAQ;IACxC;;CAKN,eACE,OACA,WAAW,OACK;EAChB,IAAI,aAAa,MAAM,EAAE,OAAO;EAMhC,OAJa,KAAK,gBAAgB,SAAS,CAAC,MACzC,SAAS,QAAQ,KAAK,OAAO,MAAM,IAAI,QAAQ,KAAK,YAAY,MAAM,CAG9D,IAAI;;CAGjB,YAAY,MAA4B;EACtC,IAAI,CAAC,MAAM,OAAO;EAMlB,OAJc,KAAK,gBAAgB,MAAM,CAAC,MACvC,EAAE,OAAO,YAAY,QAAQ,KAAK,OAAO,MAAM,IAAI,KAAK,UAAU,MAGzD,IAAI"}