diff --git a/.changeset/quick-radios-yell.md b/.changeset/quick-radios-yell.md new file mode 100644 index 00000000..084405a4 --- /dev/null +++ b/.changeset/quick-radios-yell.md @@ -0,0 +1,5 @@ +--- +'@xyflow/svelte': patch +--- + +Allow returning void, false and null from onbeforeconnect diff --git a/packages/svelte/src/lib/components/EdgeReconnectAnchor/EdgeReconnectAnchor.svelte b/packages/svelte/src/lib/components/EdgeReconnectAnchor/EdgeReconnectAnchor.svelte index d18bc2e8..81f0ab2d 100644 --- a/packages/svelte/src/lib/components/EdgeReconnectAnchor/EdgeReconnectAnchor.svelte +++ b/packages/svelte/src/lib/components/EdgeReconnectAnchor/EdgeReconnectAnchor.svelte @@ -50,7 +50,6 @@ edgeLookup } = store; - let newEdge: Edge | undefined; let edge = edgeLookup.get(edgeId)!; const _onConnectStart: OnConnectStart = (evt, params) => { @@ -86,13 +85,16 @@ onConnectStart: _onConnectStart, onConnectEnd: onconnectend, onConnect: (connection) => { - newEdge = { ...edge, ...connection }; - newEdge = onbeforereconnect ? (onbeforereconnect(newEdge, edge) ?? undefined) : newEdge; + const reconnectedEdge = { ...edge, ...connection }; + const newEdge = onbeforereconnect + ? onbeforereconnect(reconnectedEdge, edge) + : reconnectedEdge; - if (newEdge) { - store.edges = store.edges.map((e) => (e.id === edge.id ? (newEdge as Edge) : e)); + if (!newEdge) { + return; } + store.edges = store.edges.map((e) => (e.id === edge.id ? (newEdge as Edge) : e)); onreconnect?.(edge, connection); }, onReconnectEnd: (event, connectionState) => { diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 48946d41..b04a20fc 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -98,7 +98,7 @@ }); function onConnectExtended(connection: Connection) { - const edge = store.onbeforeconnect?.(connection) ?? connection; + const edge = store.onbeforeconnect ? store.onbeforeconnect(connection) : connection; if (!edge) { return; diff --git a/packages/svelte/src/lib/types/general.ts b/packages/svelte/src/lib/types/general.ts index 701496e9..77ab58b7 100644 --- a/packages/svelte/src/lib/types/general.ts +++ b/packages/svelte/src/lib/types/general.ts @@ -38,11 +38,11 @@ export type OnDelete export type OnBeforeConnect = ( connection: Connection -) => EdgeType | Connection | void; +) => EdgeType | Connection | void | false | null; export type OnBeforeReconnect = ( newEdge: EdgeType, oldEdge: EdgeType -) => EdgeType | void; +) => EdgeType | void | false | null; export type OnBeforeDelete< NodeType extends Node = Node, EdgeType extends Edge = Edge