From 8953322e532c27612d12b5bb483180b95e3a44ae Mon Sep 17 00:00:00 2001 From: Axel RICHARD Date: Wed, 30 Aug 2023 16:03:35 +0200 Subject: [PATCH] [2313] Support Palette on Edges on react-flow diagrams Bug: https://github.com/eclipse-sirius/sirius-web/issues/2313 Signed-off-by: Axel RICHARD --- CHANGELOG.adoc | 1 + .../src/renderer/DiagramRenderer.tsx | 8 +++ .../src/renderer/edge/MultiLabelEdge.tsx | 2 + .../src/renderer/palette/DiagramPalette.tsx | 2 +- .../src/renderer/palette/EdgePalette.tsx | 52 +++++++++++++++++ .../src/renderer/palette/EdgePalette.types.ts | 17 ++++++ .../renderer/palette/EdgePaletteContext.tsx | 58 +++++++++++++++++++ .../palette/EdgePaletteContext.types.ts | 30 ++++++++++ .../renderer/palette/EdgePalettePortal.tsx | 27 +++++++++ .../src/renderer/palette/NodePalette.tsx | 6 +- .../src/renderer/palette/Palette.tsx | 33 ++++++++--- .../src/renderer/palette/Palette.types.ts | 2 +- .../src/renderer/palette/useEdgePalette.tsx | 48 +++++++++++++++ .../renderer/palette/useEdgePalette.types.ts | 21 +++++++ .../representation/DiagramRepresentation.tsx | 19 +++--- 15 files changed, 306 insertions(+), 20 deletions(-) create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/EdgePalette.tsx create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/EdgePalette.types.ts create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/EdgePaletteContext.tsx create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/EdgePaletteContext.types.ts create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/EdgePalettePortal.tsx create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/useEdgePalette.tsx create mode 100644 packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/palette/useEdgePalette.types.ts diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index f387961528..042004efe3 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -91,6 +91,7 @@ This will be fixed in the next version. - https://github.com/eclipse-sirius/sirius-web/issues/2228[#2228] [domain] Creating a domain from the onboard area action now initialize its name. - https://github.com/eclipse-sirius/sirius-web/issues/2329[#2329] [form] Change the default representation in the details view for non containment reference from a select widget to a reference widget. - https://github.com/eclipse-sirius/sirius-web/issues/2314[#2314] [diagram] Add feedback on edge selection on react-flow diagrams +- https://github.com/eclipse-sirius/sirius-web/issues/2313[#2313] [diagram] Support edge palette on react-flow diagrams == v2023.8.0 diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/DiagramRenderer.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/DiagramRenderer.tsx index cc59c5eb36..e0226776ec 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/DiagramRenderer.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/DiagramRenderer.tsx @@ -42,6 +42,7 @@ import { ListNode } from './node/ListNode'; import { RectangularNode } from './node/RectangularNode'; import { DiagramPalette } from './palette/DiagramPalette'; import { useDiagramPalette } from './palette/useDiagramPalette'; +import { useEdgePalette } from './palette/useEdgePalette'; import { DiagramPanel } from './panel/DiagramPanel'; import { useReconnectEdge } from './reconnect-edge/useReconnectEdge'; @@ -70,6 +71,8 @@ export const DiagramRenderer = ({ diagram, selection, setSelection }: DiagramRen snapToGrid: false, }); const { onDiagramBackgroundClick, hideDiagramPalette } = useDiagramPalette(); + const { onEdgeClick } = useEdgePalette(); + const { onConnect } = useConnector(); const { reconnectEdge } = useReconnectEdge(); const { onDrop, onDragOver } = useDrop(); @@ -177,6 +180,10 @@ export const DiagramRenderer = ({ diagram, selection, setSelection }: DiagramRen onDiagramBackgroundClick(event); }; + const handleEdgeClick = (event: React.MouseEvent) => { + onEdgeClick(event); + }; + const handleSnapToGrid = (snapToGrid: boolean) => setState((prevState) => ({ ...prevState, snapToGrid })); const onKeyDown = (event: React.KeyboardEvent) => { @@ -196,6 +203,7 @@ export const DiagramRenderer = ({ diagram, selection, setSelection }: DiagramRen onEdgesChange={handleEdgesChange} onEdgeUpdate={reconnectEdge} onPaneClick={handlePaneClick} + onEdgeClick={handleEdgeClick} onMove={() => hideDiagramPalette()} onDrop={onDrop} onDragOver={onDragOver} diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/edge/MultiLabelEdge.tsx b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/edge/MultiLabelEdge.tsx index 568f31cc91..96bd06a2e0 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/edge/MultiLabelEdge.tsx +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/renderer/edge/MultiLabelEdge.tsx @@ -14,6 +14,7 @@ import { Theme, useTheme } from '@material-ui/core/styles'; import { memo } from 'react'; import { BaseEdge, EdgeLabelRenderer, EdgeProps, getSmoothStepPath } from 'reactflow'; import { Label } from '../Label'; +import { EdgePalette } from '../palette/EdgePalette'; import { MultiLabelEdgeData } from './MultiLabelEdge.types'; const multiLabelEdgeStyle = ( @@ -70,6 +71,7 @@ export const MultiLabelEdge = memo( markerEnd={selected ? `${markerEnd?.slice(0, markerEnd.length - 1)}--selected)` : markerEnd} markerStart={selected ? `${markerStart?.slice(0, markerStart.length - 1)}--selected)` : markerStart} /> + {selected ? : null} {beginLabel && (