UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 1.77 kB
{"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;AACxB,OAAI,MAAM,SAAS,KACjB,OAAM,MAAM,UAAU;;EAG1B,0BAAU,IAAI,KAAK;EACpB;AAED,KAAI,cACF,eAAc,SAAS,IAAI,eAAe;AAG5C,uBAAsB;AACpB,MAAI,cACF,eAAc,SAAS,OAAO,eAAgB;AAEhD,mBAAiB;GACjB;AAEF,SAAQ,6BAA6B,eAAe;AAEpD,QAAO,EACL,oBAAoB,SAAsB;AACxC,MAAI,CAAC,MAAM,UAAW;AACtB,OAAK,MAAM,aAAa,eAAgB,SACtC,WAAU,eAAe,KAAK;IAGnC"}