feat(renderer): change layer order, allow zoom on nodes and user selection

This commit is contained in:
Christopher Möller
2020-10-06 13:08:38 +02:00
parent 4f757b86b9
commit 0373b53fc2
4 changed files with 28 additions and 6 deletions
+6
View File
@@ -4,6 +4,9 @@ import ReactFlow, { removeElements, addEdge, MiniMap, Controls, Background, isNo
const onNodeDragStart = (event, node) => console.log('drag start', node); const onNodeDragStart = (event, node) => console.log('drag start', node);
const onNodeDragStop = (event, node) => console.log('drag stop', node); const onNodeDragStop = (event, node) => console.log('drag stop', node);
const onPaneClick = (event) => console.log('pane click', event);
const onPaneScroll = (event) => console.log('pane scroll', event);
const onPaneContextMenu = (event) => console.log('pane context menu', event);
const onSelectionDrag = (event, nodes) => console.log('selection drag', nodes); const onSelectionDrag = (event, nodes) => console.log('selection drag', nodes);
const onSelectionDragStart = (event, nodes) => console.log('selection drag start', nodes); const onSelectionDragStart = (event, nodes) => console.log('selection drag start', nodes);
const onSelectionDragStop = (event, nodes) => console.log('selection drag stop', nodes); const onSelectionDragStop = (event, nodes) => console.log('selection drag stop', nodes);
@@ -125,6 +128,9 @@ const OverviewFlow = () => {
onElementClick={onElementClick} onElementClick={onElementClick}
onElementsRemove={onElementsRemove} onElementsRemove={onElementsRemove}
onConnect={onConnect} onConnect={onConnect}
onPaneClick={onPaneClick}
onPaneScroll={onPaneScroll}
onPaneContextMenu={onPaneContextMenu}
onNodeDragStart={onNodeDragStart} onNodeDragStart={onNodeDragStart}
onNodeDragStop={onNodeDragStop} onNodeDragStop={onNodeDragStop}
onSelectionDragStart={onSelectionDragStart} onSelectionDragStart={onSelectionDragStart}
+1 -1
View File
@@ -103,7 +103,7 @@ const FlowRenderer = ({
onSelectionContextMenu={onSelectionContextMenu} onSelectionContextMenu={onSelectionContextMenu}
/> />
)} )}
<div className="react-flow__zoompane" onClick={onClick} onContextMenu={onContextMenu} onWheel={onWheel} /> <div className="react-flow__pane" onClick={onClick} onContextMenu={onContextMenu} onWheel={onWheel} />
</div> </div>
); );
}; };
+14 -2
View File
@@ -107,7 +107,19 @@ export default ({
useEffect(() => { useEffect(() => {
if (d3Zoom) { if (d3Zoom) {
d3Zoom.filter((event: any) => { d3Zoom.filter((event: any) => {
console.log(event); if (selectionKeyPressed) {
return false;
}
// only allow zoom on nodes
if (event.target.closest('.react-flow__node') && event.type !== 'wheel') {
return false;
}
// only allow zoom on user selection
if (event.target.closest('.react-flow__nodesselection') && event.type !== 'wheel') {
return false;
}
if (!paneMoveable) { if (!paneMoveable) {
return false; return false;
@@ -124,5 +136,5 @@ export default ({
return !event.ctrlKey && !event.button; return !event.ctrlKey && !event.button;
}); });
} }
}, [d3Zoom, zoomOnScroll, zoomOnDoubleClick, paneMoveable]); }, [d3Zoom, zoomOnScroll, zoomOnDoubleClick, paneMoveable, selectionKeyPressed]);
}; };
+7 -3
View File
@@ -6,7 +6,7 @@
} }
.react-flow__renderer, .react-flow__renderer,
.react-flow__zoompane, .react-flow__pane,
.react-flow__selectionpane { .react-flow__selectionpane {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -15,12 +15,16 @@
left: 0; left: 0;
} }
.react-flow__zoompane { .react-flow__pane {
z-index: 1; z-index: 1;
} }
.react-flow__renderer {
z-index: 4;
}
.react-flow__selectionpane { .react-flow__selectionpane {
z-index: 2; z-index: 5;
} }
.react-flow__selection { .react-flow__selection {