feat(interaction): add paneMoveable prop #377
This commit is contained in:
@@ -60,6 +60,7 @@ export interface GraphViewProps {
|
||||
markerEndId?: string;
|
||||
zoomOnScroll: boolean;
|
||||
zoomOnDoubleClick: boolean;
|
||||
paneMoveable: boolean;
|
||||
}
|
||||
|
||||
const GraphView = ({
|
||||
@@ -98,6 +99,7 @@ const GraphView = ({
|
||||
markerEndId,
|
||||
zoomOnScroll,
|
||||
zoomOnDoubleClick,
|
||||
paneMoveable,
|
||||
}: GraphViewProps) => {
|
||||
const zoomPane = useRef<HTMLDivElement>(null);
|
||||
const rendererNode = useRef<HTMLDivElement>(null);
|
||||
@@ -141,7 +143,6 @@ const GraphView = ({
|
||||
updateDimensions();
|
||||
window.onresize = updateDimensions;
|
||||
|
||||
|
||||
if (rendererNode.current) {
|
||||
resizeObserver = new ResizeObserver((entries) => {
|
||||
for (let _ of entries) {
|
||||
@@ -169,6 +170,7 @@ const GraphView = ({
|
||||
selectionKeyPressed,
|
||||
zoomOnScroll,
|
||||
zoomOnDoubleClick,
|
||||
paneMoveable,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
@@ -196,7 +198,7 @@ const GraphView = ({
|
||||
}
|
||||
}
|
||||
}, [d3Initialised, onLoad]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (onConnect) {
|
||||
setOnConnect(onConnect);
|
||||
|
||||
@@ -60,6 +60,7 @@ export interface ReactFlowProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
|
||||
nodesConnectable: boolean;
|
||||
elementsSelectable: boolean;
|
||||
selectNodesOnDrag: boolean;
|
||||
paneMoveable: boolean;
|
||||
minZoom: number;
|
||||
maxZoom: number;
|
||||
defaultZoom: number;
|
||||
@@ -110,6 +111,7 @@ const ReactFlow = ({
|
||||
markerEndId,
|
||||
zoomOnScroll,
|
||||
zoomOnDoubleClick,
|
||||
paneMoveable,
|
||||
}: ReactFlowProps) => {
|
||||
const nodeTypesParsed = useMemo(() => createNodeTypes(nodeTypes), []);
|
||||
const edgeTypesParsed = useMemo(() => createEdgeTypes(edgeTypes), []);
|
||||
@@ -154,6 +156,7 @@ const ReactFlow = ({
|
||||
markerEndId={markerEndId}
|
||||
zoomOnScroll={zoomOnScroll}
|
||||
zoomOnDoubleClick={zoomOnDoubleClick}
|
||||
paneMoveable={paneMoveable}
|
||||
/>
|
||||
{onSelectionChange && <SelectionListener onSelectionChange={onSelectionChange} />}
|
||||
{children}
|
||||
@@ -186,6 +189,7 @@ ReactFlow.defaultProps = {
|
||||
nodesConnectable: true,
|
||||
elementsSelectable: true,
|
||||
selectNodesOnDrag: true,
|
||||
paneMoveable: true,
|
||||
minZoom: 0.5,
|
||||
maxZoom: 2,
|
||||
defaultZoom: 1,
|
||||
|
||||
@@ -9,6 +9,7 @@ interface UseD3ZoomParams {
|
||||
selectionKeyPressed: boolean;
|
||||
zoomOnScroll: boolean;
|
||||
zoomOnDoubleClick: boolean;
|
||||
paneMoveable: boolean;
|
||||
onMove?: (flowTransform?: FlowTransform) => void;
|
||||
onMoveStart?: (flowTransform?: FlowTransform) => void;
|
||||
onMoveEnd?: (flowTransform?: FlowTransform) => void;
|
||||
@@ -33,6 +34,7 @@ export default ({
|
||||
zoomOnScroll,
|
||||
zoomOnDoubleClick,
|
||||
selectionKeyPressed,
|
||||
paneMoveable,
|
||||
}: UseD3ZoomParams): void => {
|
||||
const prevTransform = useRef<FlowTransform>({ x: 0, y: 0, zoom: 0 });
|
||||
const d3Zoom = useStoreState((s) => s.d3Zoom);
|
||||
@@ -100,6 +102,10 @@ export default ({
|
||||
useEffect(() => {
|
||||
if (d3Zoom) {
|
||||
d3Zoom.filter(() => {
|
||||
if (!paneMoveable) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!zoomOnScroll && event.type === 'wheel') {
|
||||
return false;
|
||||
}
|
||||
@@ -111,5 +117,5 @@ export default ({
|
||||
return !event.ctrlKey && !event.button;
|
||||
});
|
||||
}
|
||||
}, [d3Zoom, zoomOnScroll, zoomOnDoubleClick]);
|
||||
}, [d3Zoom, zoomOnScroll, zoomOnDoubleClick, paneMoveable]);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user