Blame view

node_modules/element-ui/packages/cascader-panel/src/store.js 1.57 KB
7820380e   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  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) {
      const nodes = this.getFlattedNodes(false, !this.config.lazy)
        .filter(node => (valueEquals(node.path, value) || node.value === value));
      return nodes && nodes.length ? nodes[0] : null;
    }
  }