store.mjs 1.9 KB

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