From 4fad69a1511d9911073950889581f11860c50aeb Mon Sep 17 00:00:00 2001 From: Matthias Meister Date: Fri, 3 Apr 2026 20:15:23 +0200 Subject: [PATCH] fix(canvas): ensure valid source and target node IDs when creating synthetic edges --- components/canvas/canvas.tsx | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/components/canvas/canvas.tsx b/components/canvas/canvas.tsx index f701ffe..a53cf15 100644 --- a/components/canvas/canvas.tsx +++ b/components/canvas/canvas.tsx @@ -376,11 +376,14 @@ function CanvasInner({ canvasId }: CanvasInnerProps) { zIndex: args.zIndex, }; + const sourceNode = nodeList.find((node) => node._id === args.sourceNodeId); + if (!sourceNode) return; + const syntheticEdge: Doc<"edges"> = { _id: tempEdgeId, _creationTime: Date.now(), canvasId: args.canvasId, - sourceNodeId: args.sourceNodeId as Id<"nodes">, + sourceNodeId: sourceNode._id, targetNodeId: tempNodeId, sourceHandle: args.sourceHandle, targetHandle: args.targetHandle, @@ -435,12 +438,15 @@ function CanvasInner({ canvasId }: CanvasInnerProps) { zIndex: args.zIndex, }; + const targetNode = nodeList.find((node) => node._id === args.targetNodeId); + if (!targetNode) return; + const syntheticEdge: Doc<"edges"> = { _id: tempEdgeId, _creationTime: Date.now(), canvasId: args.canvasId, sourceNodeId: tempNodeId, - targetNodeId: args.targetNodeId as Id<"nodes">, + targetNodeId: targetNode._id, sourceHandle: args.sourceHandle, targetHandle: args.targetHandle, }; @@ -462,7 +468,14 @@ function CanvasInner({ canvasId }: CanvasInnerProps) { const edgeList = localStore.getQuery(api.edges.list, { canvasId: args.canvasId, }); - if (edgeList === undefined) return; + const nodeList = localStore.getQuery(api.nodes.list, { + canvasId: args.canvasId, + }); + if (edgeList === undefined || nodeList === undefined) return; + + const sourceNode = nodeList.find((node) => node._id === args.sourceNodeId); + const targetNode = nodeList.find((node) => node._id === args.targetNodeId); + if (!sourceNode || !targetNode) return; const tempId = ( args.clientRequestId @@ -473,8 +486,8 @@ function CanvasInner({ canvasId }: CanvasInnerProps) { _id: tempId, _creationTime: Date.now(), canvasId: args.canvasId, - sourceNodeId: args.sourceNodeId, - targetNodeId: args.targetNodeId, + sourceNodeId: sourceNode._id, + targetNodeId: targetNode._id, sourceHandle: args.sourceHandle, targetHandle: args.targetHandle, };