From bc69a6adb434d96384a7eb2038b9b7a4cc208314 Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 16 Jan 2024 16:57:50 +0100 Subject: [PATCH] refactor(handles): prefix with flow id for handling nested flows #3196 --- .../src/components/EdgeWrapper/EdgeUpdateAnchors.tsx | 2 ++ packages/react/src/components/Handle/index.tsx | 9 ++++++--- packages/svelte/src/lib/components/Handle/Handle.svelte | 6 ++++-- packages/system/src/xyhandle/XYHandle.ts | 7 ++++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx index 3e3f3bf7..db56017c 100644 --- a/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx +++ b/packages/react/src/components/EdgeWrapper/EdgeUpdateAnchors.tsx @@ -55,6 +55,7 @@ export function EdgeUpdateAnchors({ onConnectEnd, cancelConnection, nodes, + rfId: flowId, panBy, updateConnection, } = store.getState(); @@ -85,6 +86,7 @@ export function EdgeUpdateAnchors({ isTarget, edgeUpdaterType: handleType, lib, + flowId, cancelConnection, panBy, isValidConnection, diff --git a/packages/react/src/components/Handle/index.tsx b/packages/react/src/components/Handle/index.tsx index 86f8da2a..362027ab 100644 --- a/packages/react/src/components/Handle/index.tsx +++ b/packages/react/src/components/Handle/index.tsx @@ -25,9 +25,9 @@ import { type ReactFlowState } from '../../types'; export type HandleComponentProps = HandleProps & Omit, 'id'>; const selector = (s: ReactFlowState) => ({ - connectionStartHandle: s.connectionStartHandle, connectOnClick: s.connectOnClick, noPanClassName: s.noPanClassName, + rfId: s.rfId, }); const connectingSelector = @@ -70,7 +70,7 @@ const HandleComponent = forwardRef( const isTarget = type === 'target'; const store = useStoreApi(); const nodeId = useNodeId(); - const { connectOnClick, noPanClassName } = useStore(selector, shallow); + const { connectOnClick, noPanClassName, rfId } = useStore(selector, shallow); const { connecting, clickConnecting } = useStore(connectingSelector(nodeId, handleId, type), shallow); if (!nodeId) { @@ -116,6 +116,7 @@ const HandleComponent = forwardRef( isTarget, handleId, nodeId, + flowId: currentStore.rfId, panBy: currentStore.panBy, cancelConnection: currentStore.cancelConnection, onConnectStart: currentStore.onConnectStart, @@ -142,6 +143,7 @@ const HandleComponent = forwardRef( connectionMode, isValidConnection: isValidConnectionStore, lib, + rfId: flowId, } = store.getState(); if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) { @@ -167,6 +169,7 @@ const HandleComponent = forwardRef( fromHandleId: connectionClickStartHandle.handleId || null, fromType: connectionClickStartHandle.type, isValidConnection: isValidConnectionHandler, + flowId, doc, lib, }); @@ -185,7 +188,7 @@ const HandleComponent = forwardRef( data-handleid={handleId} data-nodeid={nodeId} data-handlepos={position} - data-id={`${nodeId}-${handleId}-${type}`} + data-id={`${rfId}-${nodeId}-${handleId}-${type}`} className={cc([ 'react-flow__handle', `react-flow__handle-${position}`, diff --git a/packages/svelte/src/lib/components/Handle/Handle.svelte b/packages/svelte/src/lib/components/Handle/Handle.svelte index 807594e0..212efe56 100644 --- a/packages/svelte/src/lib/components/Handle/Handle.svelte +++ b/packages/svelte/src/lib/components/Handle/Handle.svelte @@ -55,7 +55,8 @@ connectionLookup, onconnect: onConnectAction, onconnectstart: onConnectStartAction, - onconnectend: onConnectEndAction + onconnectend: onConnectEndAction, + flowId } = store; function onPointerDown(event: MouseEvent | TouchEvent) { @@ -72,6 +73,7 @@ connectionMode: $connectionMode, lib: $lib, autoPanOnConnect: $autoPanOnConnect, + flowId: $flowId, isValidConnection: $isValidConnection, updateConnection, cancelConnection, @@ -128,7 +130,7 @@ data-handleid={handleId} data-nodeid={nodeId} data-handlepos={position} - data-id="{nodeId}-{id || null}-{type}" + data-id="{flowId}-{nodeId}-{id || null}-{type}" class={cc([ 'svelte-flow__handle', `svelte-flow__handle-${position}`, diff --git a/packages/system/src/xyhandle/XYHandle.ts b/packages/system/src/xyhandle/XYHandle.ts index 826a1c80..239e6356 100644 --- a/packages/system/src/xyhandle/XYHandle.ts +++ b/packages/system/src/xyhandle/XYHandle.ts @@ -27,6 +27,7 @@ export type OnPointerDownParams = { isTarget: boolean; nodes: NodeBase[]; lib: string; + flowId: string | null; edgeUpdaterType?: HandleType; updateConnection: UpdateConnection; panBy: PanBy; @@ -48,6 +49,7 @@ export type IsValidParams = { isValidConnection?: IsValidConnection; doc: Document | ShadowRoot; lib: string; + flowId: string | null; }; export type XYHandleInstance = { @@ -79,6 +81,7 @@ function onPointerDown( nodes, lib, autoPanOnConnect, + flowId, panBy, cancelConnection, onConnectStart, @@ -169,6 +172,7 @@ function onPointerDown( isValidConnection, doc, lib, + flowId, }); handleDomNode = result.handleDomNode; @@ -251,12 +255,13 @@ function isValidHandle( fromType, doc, lib, + flowId, isValidConnection = alwaysValid, }: IsValidParams ) { const isTarget = fromType === 'target'; const handleDomNode = doc.querySelector( - `.${lib}-flow__handle[data-id="${handle?.nodeId}-${handle?.id}-${handle?.type}"]` + `.${lib}-flow__handle[data-id="${flowId}-${handle?.nodeId}-${handle?.id}-${handle?.type}"]` ); const { x, y } = getEventPosition(event); const handleBelow = doc.elementFromPoint(x, y);