diff --git a/examples/svelte/src/routes/examples/edges/+page.svelte b/examples/svelte/src/routes/examples/edges/+page.svelte index 575984ca..f201a02d 100644 --- a/examples/svelte/src/routes/examples/edges/+page.svelte +++ b/examples/svelte/src/routes/examples/edges/+page.svelte @@ -6,7 +6,8 @@ Background, BackgroundVariant, MiniMap, - MarkerType + MarkerType, + type Connection } from '@xyflow/svelte'; import '@xyflow/svelte/dist/style.css'; @@ -143,6 +144,12 @@ } } ]); + + $: console.log('edges', $edges); + + function getEdgeId(connection: Connection) { + return `edge-${connection.source}-${connection.target}}`; + } { - console.log('on edge create', e); - return e; + onedgecreate={(connection) => { + console.log('on edge create', connection); + + return { + ...connection, + id: getEdgeId(connection) + }; }} > diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 745a0f28..e4b6a823 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -80,17 +80,17 @@ updateConnection, cancelConnection, panBy, - onConnect: (_connection) => { - let connection = $onedgecreate ? $onedgecreate(_connection) : _connection; + onConnect: (connection) => { + const edge = $onedgecreate ? $onedgecreate(connection) : connection; - if (!connection) { + if (!edge) { return; } - addEdge(connection); + addEdge(edge); // @todo: should we change/ improve the stuff we are passing here? // instead of source/target we could pass fromNodeId, fromHandleId, etc - dispatch('connect', { connection: _connection }); + dispatch('connect', { connection }); }, onConnectStart: (event, startParams) => { dispatch('connectstart', { diff --git a/packages/system/src/utils/edges/general.ts b/packages/system/src/utils/edges/general.ts index bdffbbd8..9ffd8e24 100644 --- a/packages/system/src/utils/edges/general.ts +++ b/packages/system/src/utils/edges/general.ts @@ -112,7 +112,7 @@ export function isEdgeVisible({ sourceNode, targetNode, width, height, transform } const getEdgeId = ({ source, sourceHandle, target, targetHandle }: Connection | EdgeBase): string => - `xyflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`; + `xy-edge__${source}${sourceHandle || ''}-${target}${targetHandle || ''}`; const connectionExists = (edge: EdgeBase, edges: EdgeBase[]) => { return edges.some( @@ -148,6 +148,14 @@ export const addEdgeBase = ( return edges; } + if (edge.sourceHandle === null) { + delete edge.sourceHandle; + } + + if (edge.targetHandle === null) { + delete edge.targetHandle; + } + return edges.concat(edge); };