1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import Node from './node';
- import { coerceTruthyValueToArray, valueEquals } from 'element-ui/src/utils/util';
- const flatNodes = (data, leafOnly) => {
- return data.reduce((res, node) => {
- if (node.isLeaf) {
- res.push(node);
- } else {
- !leafOnly && res.push(node);
- res = res.concat(flatNodes(node.children, leafOnly));
- }
- return res;
- }, []);
- };
- export default class Store {
- constructor(data, config) {
- this.config = config;
- this.initNodes(data);
- }
- initNodes(data) {
- data = coerceTruthyValueToArray(data);
- this.nodes = data.map(nodeData => new Node(nodeData, this.config));
- this.flattedNodes = this.getFlattedNodes(false, false);
- this.leafNodes = this.getFlattedNodes(true, false);
- }
- appendNode(nodeData, parentNode) {
- const node = new Node(nodeData, this.config, parentNode);
- const children = parentNode ? parentNode.children : this.nodes;
- children.push(node);
- }
- appendNodes(nodeDataList, parentNode) {
- nodeDataList = coerceTruthyValueToArray(nodeDataList);
- nodeDataList.forEach(nodeData => this.appendNode(nodeData, parentNode));
- }
- getNodes() {
- return this.nodes;
- }
- getFlattedNodes(leafOnly, cached = true) {
- const cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;
- return cached
- ? cachedNodes
- : flatNodes(this.nodes, leafOnly);
- }
- getNodeByValue(value) {
- if (value) {
- const nodes = this.getFlattedNodes(false, !this.config.lazy)
- .filter(node => (valueEquals(node.path, value) || node.value === value));
- return nodes && nodes.length ? nodes[0] : null;
- }
- return null;
- }
- }
|