element-plus
Version:
A Component Library for Vue3.0
35 lines (29 loc) • 760 B
text/typescript
import { inject, provide } from 'vue'
import Node from '../model/node'
interface NodeMap {
treeNodeExpand(node: Node) : void
children: NodeMap[]
}
export function useNodeExpandEventBroadcast(props){
const parentNodeMap = inject<NodeMap>('TreeNodeMap', null)
const currentNodeMap: NodeMap = {
treeNodeExpand: node => {
if (props.node !== node) {
props.node.collapse()
}
},
children: [],
}
if (parentNodeMap) {
parentNodeMap.children.push(currentNodeMap)
}
provide('TreeNodeMap', currentNodeMap)
return {
broadcastExpanded: (node: Node): void => {
if (!props.accordion) return
for(const childNode of currentNodeMap.children) {
childNode.treeNodeExpand(node)
}
},
}
}