feat(canvas): share magnet state across connection drags

This commit is contained in:
2026-04-11 08:41:14 +02:00
parent 52d5d487b8
commit 1d691999dd
5 changed files with 635 additions and 211 deletions

View File

@@ -39,6 +39,7 @@ type UseCanvasReconnectHandlersParams = {
nextOtherEdgeHandle: "base" | "overlay";
} | null;
onInvalidConnection?: (message: string) => void;
clearActiveMagnetTarget?: () => void;
};
export function useCanvasReconnectHandlers({
@@ -52,6 +53,7 @@ export function useCanvasReconnectHandlers({
validateConnection,
resolveMixerSwapReconnect,
onInvalidConnection,
clearActiveMagnetTarget,
}: UseCanvasReconnectHandlersParams): {
onReconnectStart: () => void;
onReconnect: (oldEdge: RFEdge, newConnection: Connection) => void;
@@ -72,10 +74,11 @@ export function useCanvasReconnectHandlers({
>(null);
const onReconnectStart = useCallback(() => {
clearActiveMagnetTarget?.();
edgeReconnectSuccessful.current = false;
isReconnectDragActiveRef.current = true;
pendingReconnectRef.current = null;
}, [edgeReconnectSuccessful, isReconnectDragActiveRef]);
}, [clearActiveMagnetTarget, edgeReconnectSuccessful, isReconnectDragActiveRef]);
const onReconnect = useCallback(
(oldEdge: RFEdge, newConnection: Connection) => {
@@ -201,11 +204,13 @@ export function useCanvasReconnectHandlers({
edgeReconnectSuccessful.current = true;
} finally {
clearActiveMagnetTarget?.();
isReconnectDragActiveRef.current = false;
}
},
[
canvasId,
clearActiveMagnetTarget,
edgeReconnectSuccessful,
isReconnectDragActiveRef,
runCreateEdgeMutation,