From fe1ba03eb0d5b5a1cd99ae8d6dbf12b5f65c4b98 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sat, 5 Nov 2022 00:24:13 +0100 Subject: [PATCH] feat(core,nodes): add `nodesInitialized` event hook --- packages/core/src/components/Nodes/NodeWrapper.vue | 3 +++ .../src/container/NodeRenderer/NodeRenderer.vue | 13 ++++++++++++- packages/core/src/container/VueFlow/VueFlow.vue | 1 + packages/core/src/store/hooks.ts | 1 + packages/core/src/types/hooks.ts | 2 ++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/core/src/components/Nodes/NodeWrapper.vue b/packages/core/src/components/Nodes/NodeWrapper.vue index b990c43c..c95a27e0 100644 --- a/packages/core/src/components/Nodes/NodeWrapper.vue +++ b/packages/core/src/components/Nodes/NodeWrapper.vue @@ -17,6 +17,8 @@ const { id, type, name, draggable, selectable, connectable, ...props } = defineP resizeObserver: ResizeObserver }>() +const nodeEmits = defineEmits(['ready']) + provide(NodeId, id) const { @@ -93,6 +95,7 @@ updatePosition( onMounted(() => { props.resizeObserver.observe(nodeElement.value) + nodeEmits('ready') }) onBeforeUnmount(() => { diff --git a/packages/core/src/container/NodeRenderer/NodeRenderer.vue b/packages/core/src/container/NodeRenderer/NodeRenderer.vue index 2f5154e3..3c5e813f 100644 --- a/packages/core/src/container/NodeRenderer/NodeRenderer.vue +++ b/packages/core/src/container/NodeRenderer/NodeRenderer.vue @@ -7,7 +7,9 @@ import { warn } from '../../utils' const slots = inject(Slots) -const { nodesDraggable, elementsSelectable, nodesConnectable, getNodes, getNodeTypes, updateNodeDimensions } = $(useVueFlow()) +const { nodesDraggable, elementsSelectable, nodesConnectable, getNodes, getNodeTypes, updateNodeDimensions, emits } = $( + useVueFlow(), +) const draggable = (d?: boolean) => (typeof d === 'undefined' ? nodesDraggable : d) const selectable = (s?: boolean) => (typeof s === 'undefined' ? elementsSelectable : s) @@ -52,6 +54,14 @@ const getType = (type?: string, template?: GraphNode['template']) => { return slot } + +const readyNodes = [] +const isReady = (id: string) => { + readyNodes.push(id) + if (readyNodes.length === getNodes.length) { + emits.nodesInitialized() + } +}