{"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,IAAI;OACR;GACL,CAAC,YAAY,IAAI,KAAK,IAAI;GAC1B,MAAM,IAAI,OAAO,UAAU,KAAK,UAAU,QAAQ,CAAC;EACrD;EACA,OAAO;CACT,GAAG,CAAC,CAAW;AACjB;AAEA,IAAqB,QAArB,MAA2B;CAKzB,YACE,MACA,QACA;EADS,KAAA,SAAA;EAET,MAAM,SAAS,QAAQ,CAAC,EAAA,CAAG,KACxB,aAAa,IAAI,KAAK,UAAU,KAAK,MAAM,CAC9C;EACA,KAAK,QAAQ;EACb,KAAK,WAAW,UAAU,OAAO,KAAK;EACtC,KAAK,YAAY,UAAU,OAAO,IAAI;CACxC;CAEA,WAAW;EACT,OAAO,KAAK;CACd;CAEA,gBAAgB,UAAmB;EACjC,OAAO,WAAW,KAAK,YAAY,KAAK;CAC1C;CAEA,WAAW,UAA0B,YAAmB;EACtD,MAAM,OAAO,aACT,WAAW,YAAY,QAAQ,IAC/B,IAAI,KAAK,UAAU,KAAK,MAAM;EAElC,IAAI,CAAC,YAAY,KAAK,MAAM,KAAK,IAAI;EAErC,KAAK,2BAA2B,IAAI;CACtC;CAEA,YAAY,cAAgC,YAAkB;EAC5D,IAAI,aAAa,SAAS,GACxB,aAAa,SAAS,aAAa,KAAK,WAAW,UAAU,UAAU,CAAC;OAExE,cAAc,WAAW,UAAU,KAAK,UAAU,KAAK,UAAU;CAErE;CAEA,2BAA2B,MAAY;EACrC,KAAK,SAAS,KAAK,IAAI;EACvB,KAAK,UAAU,KAAK,UAAU,KAAK,IAAI;EACvC,IAAI,KAAK,UACP,KAAK,SAAS,SAAS,YAAY;GACjC,KAAK,2BAA2B,OAAO;EACzC,CAAC;CAEL;CAGA,eACE,OACA,WAAW,OACK;EAChB,IAAI,aAAa,KAAK,GAAG,OAAO;EAMhC,OAJa,KAAK,gBAAgB,QAAQ,CAAC,CAAC,MACzC,SAAS,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,YAAY,KAAK,CAG9D,KAAK;CACjB;CAEA,YAAY,MAA4B;EACtC,IAAI,CAAC,MAAM,OAAO;EAMlB,OAJc,KAAK,gBAAgB,KAAK,CAAC,CAAC,MACvC,EAAE,OAAO,YAAY,QAAQ,KAAK,OAAO,KAAK,KAAK,KAAK,UAAU,KAG1D,KAAK;CAClB;AACF"}