diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertHandles.ts b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertHandles.ts index 2f337616fa..c051c9ca69 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertHandles.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertHandles.ts @@ -40,19 +40,5 @@ export const convertHandles = (gqlNode: GQLNode, gqlEdges: GQLEdge targetHandlesCounter += 1; } }); - connectionHandles.push({ - id: `handle--source--${gqlNode.id}--${sourceHandlesCounter}`, - nodeId: gqlNode.id, - position: Position.Right, - type: 'source', - }); - - connectionHandles.push({ - id: `handle--target--${gqlNode.id}--${targetHandlesCounter}`, - nodeId: gqlNode.id, - position: Position.Left, - type: 'target', - }); - return connectionHandles; }; diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.tsx index 2c6438f34a..53eaf7b09a 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.tsx @@ -87,7 +87,7 @@ const handleStyle = ( const edgesSelectedSelector = (state: ReactFlowState) => Array.from(state.edges.values()).filter((edge) => edge.selected); -export const ConnectionHandles = ({ connectionHandles }: ConnectionHandlesProps) => { +export const ConnectionHandles = ({ nodeId, connectionHandles }: ConnectionHandlesProps) => { const theme = useTheme(); const edgesSelected = useStore(edgesSelectedSelector); const handlesSelected: string[] = edgesSelected.flatMap((edge) => { @@ -102,6 +102,34 @@ export const ConnectionHandles = ({ connectionHandles }: ConnectionHandlesProps) return !!handlesSelected.find((selectedHandle) => selectedHandle === connectionHandle.id); }; + const rightSideVirtualHandleId = `handle--source--${nodeId}--${ + connectionHandles.filter((connectionHandle) => connectionHandle.position === Position.Right).length + 1 + }`; + const rightSideVirtualHandle = ( + + ); + + const leftSideVirtualHandleId = `handle--target--${nodeId}--${ + connectionHandles.filter((connectionHandle) => connectionHandle.position === Position.Left).length + 1 + }`; + const leftSideVirtualHandle = ( + + ); + return ( <> {Object.values(Position).map((position) => { @@ -110,18 +138,11 @@ export const ConnectionHandles = ({ connectionHandles }: ConnectionHandlesProps) ); return (
- {currentSideHandles.map((connectionHandle, index) => { - const isVirtualHandle = - (position === Position.Left || position === Position.Right) && index === currentSideHandles.length - 1; + {currentSideHandles.map((connectionHandle) => { return ( ); })} + {position === Position.Right ? rightSideVirtualHandle : null} + {position === Position.Left ? leftSideVirtualHandle : null}
); })} diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.types.ts b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.types.ts index 419234f641..2e105424cd 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.types.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/handles/ConnectionHandles.types.ts @@ -14,6 +14,7 @@ import { HandleProps } from 'reactflow'; export interface ConnectionHandlesProps { + nodeId: string; connectionHandles: ConnectionHandle[]; } diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ImageNode.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ImageNode.tsx index 8ca35b6a16..e49061ea33 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ImageNode.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ImageNode.tsx @@ -92,7 +92,7 @@ export const ImageNode = memo(({ data, id, selected }: NodeProps) {selected ? : null} {selected ? : null} - + ); }); diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ListNode.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ListNode.tsx index 0cb0a38f21..e492204357 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ListNode.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/ListNode.tsx @@ -81,7 +81,7 @@ export const ListNode = memo(({ data, id, selected }: NodeProps) = {selected ? : null} {selected ? : null} - + ); diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/RectangularNode.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/RectangularNode.tsx index ba2a9d0d33..7cb418ee22 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/RectangularNode.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/node/RectangularNode.tsx @@ -79,7 +79,7 @@ export const RectangularNode = memo(({ data, id, selected }: NodeProps : null} {selected ? : null} - + ); diff --git a/packages/sirius-web/frontend/sirius-web-application/src/nodes/EllipseNode.tsx b/packages/sirius-web/frontend/sirius-web-application/src/nodes/EllipseNode.tsx index a1c6a62d12..c65e557ad6 100644 --- a/packages/sirius-web/frontend/sirius-web-application/src/nodes/EllipseNode.tsx +++ b/packages/sirius-web/frontend/sirius-web-application/src/nodes/EllipseNode.tsx @@ -86,7 +86,7 @@ export const EllipseNode = memo(({ data, id, selected }: NodeProps : null} {selected ? : null} - + );