UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

49 lines (39 loc) • 1.11 kB
import { inject, provide, InjectionKey } from 'vue'; // type import type Node from '../store/node'; interface NodeMap { treeNodeCollapse(node: Node): void; children: NodeMap[]; } const TreeNodeMapContextKey: InjectionKey<NodeMap> = Symbol('ivue-tree-node-map'); // 派发展开事件 export function useNodeExpandEventBroadcast(props) { const parentNodeMap = inject(TreeNodeMapContextKey, null); // 当前节点 const currentNodeMap: NodeMap = { // tree 节点关闭 treeNodeCollapse: (node) => { if (props.node !== node) { props.node.collapse(); } }, children: [], }; // 有父节点 if (parentNodeMap) { parentNodeMap.children.push(currentNodeMap); } provide(TreeNodeMapContextKey, currentNodeMap); return { broadcastExpanded: (node: Node): void => { // 是否每次只打开一个同级树节点展开 if (!props.accordion) { return; } for (const childNode of currentNodeMap.children) { childNode.treeNodeCollapse(node); } }, }; }