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 +}