From 00a1f9d4846a04ea0e16c3087aea885f17d14404 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Thu, 1 Feb 2024 11:23:41 +0100 Subject: [PATCH] feat(core): add `useNodeId` composable --- packages/core/src/composables/useNode.ts | 5 +++-- packages/core/src/composables/useNodeId.ts | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/core/src/composables/useNodeId.ts diff --git a/packages/core/src/composables/useNode.ts b/packages/core/src/composables/useNode.ts index 4fc632fb..40d6ed57 100644 --- a/packages/core/src/composables/useNode.ts +++ b/packages/core/src/composables/useNode.ts @@ -1,8 +1,9 @@ import { computed, inject, ref } from 'vue' import type { CustomEvent, ElementData } from '../types' import { ErrorCode, VueFlowError, getConnectedEdges } from '../utils' -import { NodeId, NodeRef } from '../context' +import { NodeRef } from '../context' import { useVueFlow } from './useVueFlow' +import { useNodeId } from './useNodeId' /** * Access a node, it's parent (if one exists) and connected edges @@ -12,7 +13,7 @@ import { useVueFlow } from './useVueFlow' * Meaning if you do not provide an id, this composable has to be called in a child of your custom node component, or it will throw */ export function useNode = any>(id?: string) { - const nodeId = id ?? inject(NodeId, '') + const nodeId = id ?? useNodeId() const nodeEl = inject(NodeRef, ref(null)) const { findNode, edges, emits } = useVueFlow() diff --git a/packages/core/src/composables/useNodeId.ts b/packages/core/src/composables/useNodeId.ts new file mode 100644 index 00000000..cb235290 --- /dev/null +++ b/packages/core/src/composables/useNodeId.ts @@ -0,0 +1,13 @@ +import { inject } from 'vue' +import { NodeId } from '../context' + +export function useNodeId() { + const nodeId = inject(NodeId, null) + + if (!nodeId) { + // todo: emit error through hook + throw new Error('useNodeId must be called inside a Node component') + } + + return nodeId +}