{"version":3,"file":"store.mjs","sources":["../../../../../packages/components/cascade-panel/src/store.ts"],"sourcesContent":["import { isEqual } from 'lodash-unified'\nimport Node from './node'\n\nimport type { Nullable } from '@element-ultra/utils'\nimport type {\n  CascadeNodeValue,\n  CascadeNodePathValue,\n  CascadeOption,\n  CascadeConfig,\n} from './node'\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(data: CascadeOption[], readonly config: CascadeConfig) {\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: CascadeOption, 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.allNodes.push(node)\n    node.isLeaf && this.leafNodes.push(node)\n  }\n\n  appendNodes(nodeDataList: CascadeOption[], parentNode: Node) {\n    nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode))\n  }\n\n  // when checkStrictly, leaf node first\n  getNodeByValue(\n    value: CascadeNodeValue | CascadeNodePathValue,\n    leafOnly = false\n  ): Nullable<Node> {\n    if (!value && value !== 0) return null\n\n    const nodes = this.getFlattedNodes(leafOnly).filter(\n      (node) => isEqual(node.value, value) || isEqual(node.pathValues, value)\n    )\n\n    return nodes[0] || null\n  }\n\n  getSameNode(node: Node): Nullable<Node> {\n    if (!node) return null\n\n    const nodes = this.getFlattedNodes(false).filter(\n      ({ value, level }) => isEqual(node.value, value) && node.level === level\n    )\n\n    return nodes[0] || null\n  }\n}\n"],"names":[],"mappings":"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"}