UNPKG

@opentiny/vue-renderless

Version:

An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.

73 lines (72 loc) 2.04 kB
import "../chunk-G2ADBYYC.js"; import Node from "./node"; import { valueEquals, coerceTruthyValueToArray as toArray } from "./index"; const flatNodes = (data, leafOnly) => data.reduce((prev, node) => { if (node.isLeaf) { prev.push(node); } else { !leafOnly && prev.push(node); prev = prev.concat(flatNodes(node.children, leafOnly)); } return prev; }, []); class Store { constructor(data, config) { this.config = config; this.initNodes(data); } getNodes() { return this.nodes; } initNodes(data) { data = toArray(data); this.nodes = data.map((nodeData) => new Node(nodeData, this.config)); this.flattedNodes = this.getFlattedNodes(false, false); this.leafNodes = this.getFlattedNodes(true, false); } /** * 添加节点到parentNode */ appendNode(nodeData, parentNode) { const { config, nodes } = this; const node = new Node(nodeData, config, parentNode); const children = parentNode ? parentNode.children : nodes; children.push(node); } /** * 添加节点到parentNode */ appendNodes(nodeDataList, parentNode) { nodeDataList = toArray(nodeDataList); nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode)); } /** * 获取节点值 * @param leafOnly 只包含叶子节点 * @param cached 取缓存(flattedNodes或者leafNodes)中的数据 * @returns */ getFlattedNodes(leafOnly, cached = true) { const { leafNodes, flattedNodes } = this; const cachedNodes = leafOnly ? leafNodes : flattedNodes; return cached ? cachedNodes : flatNodes(this.nodes, leafOnly); } /** * 通过节点值获取Node节点 * @param value * @returns */ getNodeByValue(value) { if (value) { const lazy = !this.config.lazy; const nodes = this.getFlattedNodes(false, lazy).filter( (node) => valueEquals(node.path, value) || node.value === value ); return nodes && nodes.length ? nodes[0] : null; } return null; } } export { Store as default };