store.js 2.0 KB

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