From 9a334e3378dcd7aa60e8e080b71ad9fe2f1a59e1 Mon Sep 17 00:00:00 2001 From: Florian Barbin Date: Thu, 23 Jun 2022 15:36:34 +0200 Subject: [PATCH] [1281] Add support for Link widget in Form Description editor. Bug: https://github.com/eclipse-sirius/sirius-components/issues/1281 Signed-off-by: Florian Barbin --- .../FormDescriptionEditorRepresentation.tsx | 13 ++++ ...rmDescriptionEditorRepresentation.types.ts | 1 + .../src/LinkWidget.tsx | 60 +++++++++++++++++++ .../src/WidgetEntry.tsx | 11 ++++ .../src/WidgetOperations.tsx | 1 + 5 files changed, 86 insertions(+) create mode 100644 packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/LinkWidget.tsx diff --git a/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/FormDescriptionEditorRepresentation.tsx b/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/FormDescriptionEditorRepresentation.tsx index dd472ebbbe..981fa9777d 100644 --- a/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/FormDescriptionEditorRepresentation.tsx +++ b/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/FormDescriptionEditorRepresentation.tsx @@ -23,6 +23,7 @@ import ArrowDropDownCircleIcon from '@material-ui/icons/ArrowDropDownCircle'; import BarChartIcon from '@material-ui/icons/BarChart'; import CheckBoxIcon from '@material-ui/icons/CheckBox'; import LabelOutlinedIcon from '@material-ui/icons/LabelOutlined'; +import LinkIcon from '@material-ui/icons/Link'; import CloseIcon from '@material-ui/icons/Close'; import PieChartIcon from '@material-ui/icons/PieChart'; import RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked'; @@ -394,6 +395,18 @@ export const FormDescriptionEditorRepresentation = ({ Button +
({ + selected: { + color: theme.palette.primary.main, + }, +})); + +export const LinkWidget = ({ widget, selection }: WidgetProps) => { + const classes = useStyles(); + + const [selected, setSelected] = useState(false); + + const ref = useRef(null); + + useEffect(() => { + if (ref.current && selection.entries.find((entry) => entry.id === widget.id)) { + ref.current.focus(); + setSelected(true); + } else { + setSelected(false); + } + }, [selection, widget]); + + return ( +
+ + {widget.label} + + setSelected(true)} + onBlur={() => setSelected(false)} + tabIndex={0} + href="#" + rel="noopener noreferrer" + target="_blank" + > + noopener noreferrer + +
+ ); +}; diff --git a/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/WidgetEntry.tsx b/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/WidgetEntry.tsx index 22591c841d..9ae1a6f5bd 100644 --- a/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/WidgetEntry.tsx +++ b/packages/formdescriptioneditors/frontend/sirius-components-formdescriptioneditors/src/WidgetEntry.tsx @@ -49,6 +49,7 @@ import { WidgetEntryProps, WidgetEntryState, WidgetEntryStyleProps } from './Wid import { isKind } from './WidgetOperations'; import { ButtonWidget } from './ButtonWidget'; import { LabelWidget } from './LabelWidget'; +import { LinkWidget } from './LinkWidget'; const useWidgetEntryStyles = makeStyles(() => ({ widget: { @@ -326,6 +327,16 @@ export const WidgetEntry = ({ onDropBefore={onDropBefore} /> ); + } else if (widget.kind === 'Link') { + widgetElement = ( + + ); } else if (widget.kind === 'BarChart') { widgetElement = ( { value === 'MultiSelect' || value === 'Button' || value === 'Label' || + value === 'Link' || value === 'BarChart' || value === 'PieChart' || value === 'FlexboxContainer'