fix(canvas): ensure valid source and target node IDs when creating synthetic edges

This commit is contained in:
2026-04-03 20:15:23 +02:00
parent d7d715fd03
commit 4fad69a151

View File

@@ -376,11 +376,14 @@ function CanvasInner({ canvasId }: CanvasInnerProps) {
zIndex: args.zIndex, zIndex: args.zIndex,
}; };
const sourceNode = nodeList.find((node) => node._id === args.sourceNodeId);
if (!sourceNode) return;
const syntheticEdge: Doc<"edges"> = { const syntheticEdge: Doc<"edges"> = {
_id: tempEdgeId, _id: tempEdgeId,
_creationTime: Date.now(), _creationTime: Date.now(),
canvasId: args.canvasId, canvasId: args.canvasId,
sourceNodeId: args.sourceNodeId as Id<"nodes">, sourceNodeId: sourceNode._id,
targetNodeId: tempNodeId, targetNodeId: tempNodeId,
sourceHandle: args.sourceHandle, sourceHandle: args.sourceHandle,
targetHandle: args.targetHandle, targetHandle: args.targetHandle,
@@ -435,12 +438,15 @@ function CanvasInner({ canvasId }: CanvasInnerProps) {
zIndex: args.zIndex, zIndex: args.zIndex,
}; };
const targetNode = nodeList.find((node) => node._id === args.targetNodeId);
if (!targetNode) return;
const syntheticEdge: Doc<"edges"> = { const syntheticEdge: Doc<"edges"> = {
_id: tempEdgeId, _id: tempEdgeId,
_creationTime: Date.now(), _creationTime: Date.now(),
canvasId: args.canvasId, canvasId: args.canvasId,
sourceNodeId: tempNodeId, sourceNodeId: tempNodeId,
targetNodeId: args.targetNodeId as Id<"nodes">, targetNodeId: targetNode._id,
sourceHandle: args.sourceHandle, sourceHandle: args.sourceHandle,
targetHandle: args.targetHandle, targetHandle: args.targetHandle,
}; };
@@ -462,7 +468,14 @@ function CanvasInner({ canvasId }: CanvasInnerProps) {
const edgeList = localStore.getQuery(api.edges.list, { const edgeList = localStore.getQuery(api.edges.list, {
canvasId: args.canvasId, 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 = ( const tempId = (
args.clientRequestId args.clientRequestId
@@ -473,8 +486,8 @@ function CanvasInner({ canvasId }: CanvasInnerProps) {
_id: tempId, _id: tempId,
_creationTime: Date.now(), _creationTime: Date.now(),
canvasId: args.canvasId, canvasId: args.canvasId,
sourceNodeId: args.sourceNodeId, sourceNodeId: sourceNode._id,
targetNodeId: args.targetNodeId, targetNodeId: targetNode._id,
sourceHandle: args.sourceHandle, sourceHandle: args.sourceHandle,
targetHandle: args.targetHandle, targetHandle: args.targetHandle,
}; };