element-plus
Version:
A Component Library for Vue 3
1 lines • 1.77 kB
Source Map (JSON)
{"version":3,"file":"useNodeExpandEventBroadcast.mjs","names":[],"sources":["../../../../../../../packages/components/tree/src/model/useNodeExpandEventBroadcast.ts"],"sourcesContent":["import { inject, onBeforeUnmount, provide } from 'vue'\nimport { TREE_NODE_MAP_INJECTION_KEY } from '../tokens'\n\nimport type Node from '../model/node'\n\ninterface NodeMap {\n treeNodeExpand(node?: Node): void\n children: Set<NodeMap>\n}\n\ninterface Props {\n node?: Node\n accordion: boolean\n}\n\nexport function useNodeExpandEventBroadcast(props: Props) {\n const parentNodeMap = inject(\n TREE_NODE_MAP_INJECTION_KEY,\n null\n ) as NodeMap | null\n let currentNodeMap: NodeMap | null = {\n treeNodeExpand: (node) => {\n if (props.node !== node) {\n props.node?.collapse()\n }\n },\n children: new Set(),\n }\n\n if (parentNodeMap) {\n parentNodeMap.children.add(currentNodeMap)\n }\n\n onBeforeUnmount(() => {\n if (parentNodeMap) {\n parentNodeMap.children.delete(currentNodeMap!)\n }\n currentNodeMap = null\n })\n\n provide(TREE_NODE_MAP_INJECTION_KEY, currentNodeMap)\n\n return {\n broadcastExpanded: (node?: Node): void => {\n if (!props.accordion) return\n for (const childNode of currentNodeMap!.children) {\n childNode.treeNodeExpand(node)\n }\n },\n }\n}\n"],"mappings":";;;AAeA,SAAgB,4BAA4B,OAAc;CACxD,MAAM,gBAAgB,OACpB,6BACA,KACD;CACD,IAAI,iBAAiC;EACnC,iBAAiB,SAAS;GACxB,IAAI,MAAM,SAAS,MACjB,MAAM,MAAM,UAAU;;EAG1B,0BAAU,IAAI,KAAK;EACpB;CAED,IAAI,eACF,cAAc,SAAS,IAAI,eAAe;CAG5C,sBAAsB;EACpB,IAAI,eACF,cAAc,SAAS,OAAO,eAAgB;EAEhD,iBAAiB;GACjB;CAEF,QAAQ,6BAA6B,eAAe;CAEpD,OAAO,EACL,oBAAoB,SAAsB;EACxC,IAAI,CAAC,MAAM,WAAW;EACtB,KAAK,MAAM,aAAa,eAAgB,UACtC,UAAU,eAAe,KAAK;IAGnC"}