Skip to content

Commit b3d8b06

Browse files
committed
Feat(DND): Enable Simple DND
1 parent 6a705f6 commit b3d8b06

13 files changed

+473
-186
lines changed

packages/ui/src/components/Visualization/Custom/Group/CustomGroupExpanded.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
useAnchor,
1313
useHover,
1414
useSelection,
15+
withDndDrop,
1516
} from '@patternfly/react-topology';
1617
import { FunctionComponent, useContext, useRef } from 'react';
1718
import { AddStepMode, IVisualizationNode, NodeToolbarTrigger } from '../../../../models';
@@ -23,9 +24,10 @@ import { AddStepIcon } from '../Edge/AddStepIcon';
2324
import { TargetAnchor } from '../target-anchor';
2425
import './CustomGroupExpanded.scss';
2526
import { CustomGroupProps } from './Group.models';
27+
import { customGroupExpandedDropTargetSpec } from '../customComponentUtils';
2628

27-
export const CustomGroupExpanded: FunctionComponent<CustomGroupProps> = observer(
28-
({ element, onContextMenu, onCollapseToggle }) => {
29+
export const CustomGroupExpandedInner: FunctionComponent<CustomGroupProps> = observer(
30+
({ element, onContextMenu, onCollapseToggle, dndDropRef, droppable }) => {
2931
if (!isNode(element)) {
3032
throw new Error('CustomGroupExpanded must be used only on Node elements');
3133
}
@@ -41,7 +43,7 @@ export const CustomGroupExpanded: FunctionComponent<CustomGroupProps> = observer
4143
CanvasDefaults.HOVER_DELAY_IN,
4244
CanvasDefaults.HOVER_DELAY_OUT,
4345
);
44-
const boxRef = useRef<Rect>(element.getBounds());
46+
const boxRef = useRef<Rect | null>(null);
4547
const shouldShowToolbar =
4648
settingsAdapter.getSettings().nodeToolbarTrigger === NodeToolbarTrigger.onHover
4749
? isGHover || isToolbarHover || isSelected
@@ -58,7 +60,9 @@ export const CustomGroupExpanded: FunctionComponent<CustomGroupProps> = observer
5860
return null;
5961
}
6062

61-
boxRef.current = element.getBounds();
63+
if (!droppable || !boxRef.current) {
64+
boxRef.current = element.getBounds();
65+
}
6266
const toolbarWidth = Math.max(CanvasDefaults.STEP_TOOLBAR_WIDTH, boxRef.current.width);
6367
const toolbarX = boxRef.current.x + (boxRef.current.width - toolbarWidth) / 2;
6468
const toolbarY = boxRef.current.y - CanvasDefaults.STEP_TOOLBAR_HEIGHT;
@@ -83,6 +87,7 @@ export const CustomGroupExpanded: FunctionComponent<CustomGroupProps> = observer
8387
onContextMenu={onContextMenu}
8488
>
8589
<foreignObject
90+
ref={dndDropRef}
8691
data-nodelabel={label}
8792
x={boxRef.current.x}
8893
y={boxRef.current.y}
@@ -145,3 +150,5 @@ export const CustomGroupExpanded: FunctionComponent<CustomGroupProps> = observer
145150
);
146151
},
147152
);
153+
154+
export const CustomGroupExpanded = withDndDrop(customGroupExpandedDropTargetSpec)(CustomGroupExpandedInner);

packages/ui/src/components/Visualization/Custom/Node/CustomNode.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
flex-flow: column nowrap;
1010
justify-content: space-around;
1111

12+
&__dropTarget {
13+
@include custom.drop-target;
14+
}
15+
1216
&__image {
1317
position: relative;
1418
display: flex;

0 commit comments

Comments
 (0)