You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
2.0 KiB

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var isEqual = require('lodash/isEqual');
var node = require('./node.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
const flatNodes = (nodes, leafOnly) => {
return nodes.reduce((res, node) => {
if (node.isLeaf) {
res.push(node);
} else {
!leafOnly && res.push(node);
res = res.concat(flatNodes(node.children, leafOnly));
}
return res;
}, []);
};
class Store {
constructor(data, config) {
this.config = config;
const nodes = (data || []).map((nodeData) => new node["default"](nodeData, this.config));
this.nodes = nodes;
this.allNodes = flatNodes(nodes, false);
this.leafNodes = flatNodes(nodes, true);
}
getNodes() {
return this.nodes;
}
getFlattedNodes(leafOnly) {
return leafOnly ? this.leafNodes : this.allNodes;
}
appendNode(nodeData, parentNode) {
const node$1 = parentNode ? parentNode.appendChild(nodeData) : new node["default"](nodeData, this.config);
if (!parentNode)
this.nodes.push(node$1);
this.allNodes.push(node$1);
node$1.isLeaf && this.leafNodes.push(node$1);
}
appendNodes(nodeDataList, parentNode) {
nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode));
}
getNodeByValue(value, leafOnly = false) {
if (!value && value !== 0)
return null;
const nodes = this.getFlattedNodes(leafOnly).filter((node) => isEqual__default["default"](node.value, value) || isEqual__default["default"](node.pathValues, value));
return nodes[0] || null;
}
getSameNode(node) {
if (!node)
return null;
const nodes = this.getFlattedNodes(false).filter(({ value, level }) => isEqual__default["default"](node.value, value) && node.level === level);
return nodes[0] || null;
}
}
exports["default"] = Store;
//# sourceMappingURL=store.js.map