UNPKG

big-ee-ui

Version:

基于element-ui二次封装的UI库

81 lines (71 loc) 2.15 kB
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 }, []) } const flatNodesRewrite = data => { let leafNodes = [] let flattedNodes = [] const flatItem = arr => { arr.forEach(node => { if (node.isLeaf || !node.children || !node.children.length) { leafNodes.push(node) flattedNodes.push(node) } else { flattedNodes.push(node) flatItem(node.children) } }) } flatItem(data) return { leafNodes, flattedNodes } } 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)) const { flattedNodes, leafNodes } = flatNodesRewrite(this.nodes) this.flattedNodes = flattedNodes this.leafNodes = leafNodes } 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 } }