store.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { isEqual } from 'lodash-unified';
  2. import Node from './node.mjs';
  3. const flatNodes = (nodes, leafOnly) => {
  4. return nodes.reduce((res, node) => {
  5. if (node.isLeaf) {
  6. res.push(node);
  7. } else {
  8. !leafOnly && res.push(node);
  9. res = res.concat(flatNodes(node.children, leafOnly));
  10. }
  11. return res;
  12. }, []);
  13. };
  14. class Store {
  15. constructor(data, config) {
  16. this.config = config;
  17. const nodes = (data || []).map((nodeData) => new Node(nodeData, this.config));
  18. this.nodes = nodes;
  19. this.allNodes = flatNodes(nodes, false);
  20. this.leafNodes = flatNodes(nodes, true);
  21. }
  22. getNodes() {
  23. return this.nodes;
  24. }
  25. getFlattedNodes(leafOnly) {
  26. return leafOnly ? this.leafNodes : this.allNodes;
  27. }
  28. appendNode(nodeData, parentNode) {
  29. const node = parentNode ? parentNode.appendChild(nodeData) : new Node(nodeData, this.config);
  30. if (!parentNode)
  31. this.nodes.push(node);
  32. this.allNodes.push(node);
  33. node.isLeaf && this.leafNodes.push(node);
  34. }
  35. appendNodes(nodeDataList, parentNode) {
  36. nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode));
  37. }
  38. getNodeByValue(value, leafOnly = false) {
  39. if (!value && value !== 0)
  40. return null;
  41. const node = this.getFlattedNodes(leafOnly).find((node2) => isEqual(node2.value, value) || isEqual(node2.pathValues, value));
  42. return node || null;
  43. }
  44. getSameNode(node) {
  45. if (!node)
  46. return null;
  47. const node_ = this.getFlattedNodes(false).find(({ value, level }) => isEqual(node.value, value) && node.level === level);
  48. return node_ || null;
  49. }
  50. }
  51. export { Store as default };
  52. //# sourceMappingURL=store.mjs.map