diff --git a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx index 236592ee..e10da1bc 100644 --- a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx +++ b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx @@ -1,5 +1,5 @@ // Reconnectable edges have a anchors around their handles to reconnect the edge. -import { XYHandle, type Connection, EdgePosition } from '@xyflow/system'; +import { XYHandle, type Connection, EdgePosition, FinalConnectionState } from '@xyflow/system'; import { EdgeAnchor } from '../Edges/EdgeAnchor'; import type { EdgeWrapperProps, Edge } from '../../types/edges'; @@ -68,9 +68,9 @@ export function EdgeUpdateAnchors({ setReconnecting(true); onReconnectStart?.(event, edge, handleType); - const _onReconnectEnd = (evt: MouseEvent | TouchEvent) => { + const _onReconnectEnd = (evt: MouseEvent | TouchEvent, connectionState: FinalConnectionState) => { setReconnecting(false); - onReconnectEnd?.(evt, edge, handleType); + onReconnectEnd?.(evt, edge, handleType, connectionState); }; const onConnectEdge = (connection: Connection) => onReconnect?.(edge, connection); diff --git a/packages/react/src/types/edges.ts b/packages/react/src/types/edges.ts index e765b389..8b0cebab 100644 --- a/packages/react/src/types/edges.ts +++ b/packages/react/src/types/edges.ts @@ -14,6 +14,8 @@ import type { EdgePosition, StepPathOptions, OnError, + ConnectionState, + FinalConnectionState, } from '@xyflow/system'; import { EdgeTypes, InternalNode, Node } from '.'; @@ -78,7 +80,12 @@ export type EdgeWrapperProps = { onMouseLeave?: EdgeMouseHandler; reconnectRadius?: number; onReconnectStart?: (event: ReactMouseEvent, edge: EdgeType, handleType: HandleType) => void; - onReconnectEnd?: (event: MouseEvent | TouchEvent, edge: EdgeType, handleType: HandleType) => void; + onReconnectEnd?: ( + event: MouseEvent | TouchEvent, + edge: EdgeType, + handleType: HandleType, + connectionState: FinalConnectionState + ) => void; rfId?: string; edgeTypes?: EdgeTypes; onError?: OnError; diff --git a/packages/system/src/types/general.ts b/packages/system/src/types/general.ts index 4440f58b..56e97afe 100644 --- a/packages/system/src/types/general.ts +++ b/packages/system/src/types/general.ts @@ -50,10 +50,9 @@ export type OnConnectStartParams = { export type OnConnectStart = (event: MouseEvent | TouchEvent, params: OnConnectStartParams) => void; export type OnConnect = (connection: Connection) => void; -export type OnConnectEnd = ( - event: MouseEvent | TouchEvent, - connectionState: Omit -) => void; +export type OnConnectEnd = (event: MouseEvent | TouchEvent, connectionState: FinalConnectionState) => void; + +export type FinalConnectionState = Omit; export type IsValidConnection = (edge: EdgeBase | Connection) => boolean; diff --git a/packages/system/src/xyhandle/XYHandle.ts b/packages/system/src/xyhandle/XYHandle.ts index 53d64a18..cc4c5d1f 100644 --- a/packages/system/src/xyhandle/XYHandle.ts +++ b/packages/system/src/xyhandle/XYHandle.ts @@ -194,13 +194,14 @@ function onPointerDown( // in order to get the latest state of onConnectEnd // eslint-disable-next-line @typescript-eslint/no-unused-vars const { inProgress, ...connectionState } = previousConnection; - onConnectEnd?.(event, { + const finalConnectionState = { ...connectionState, toPosition: previousConnection.toHandle ? previousConnection.toPosition : null, - }); + }; + onConnectEnd?.(event, finalConnectionState); if (edgeUpdaterType) { - onReconnectEnd?.(event); + onReconnectEnd?.(event, finalConnectionState); } cancelConnection(); diff --git a/packages/system/src/xyhandle/types.ts b/packages/system/src/xyhandle/types.ts index 799f68c3..6e468b0a 100644 --- a/packages/system/src/xyhandle/types.ts +++ b/packages/system/src/xyhandle/types.ts @@ -11,6 +11,8 @@ import { type UpdateConnection, type IsValidConnection, NodeLookup, + ConnectionState, + FinalConnectionState, } from '../types'; export type OnPointerDownParams = { @@ -32,7 +34,7 @@ export type OnPointerDownParams = { onConnect?: OnConnect; onConnectEnd?: OnConnectEnd; isValidConnection?: IsValidConnection; - onReconnectEnd?: (evt: MouseEvent | TouchEvent) => void; + onReconnectEnd?: (evt: MouseEvent | TouchEvent, connectionState: FinalConnectionState) => void; getTransform: () => Transform; getFromHandle: () => Handle | null; autoPanSpeed?: number;