refactor(props): merge defaultPosition and defaultZoom to defaultViewport #2313

This commit is contained in:
moklick
2022-07-25 16:03:42 +02:00
parent 0054dd3d61
commit 37b311851c
6 changed files with 31 additions and 32 deletions
@@ -51,8 +51,7 @@ const FlowRenderer = ({
panOnScrollMode,
zoomOnDoubleClick,
panOnDrag,
defaultPosition,
defaultZoom,
defaultViewport,
preventScrolling,
onSelectionContextMenu,
noWheelClassName,
@@ -87,8 +86,7 @@ const FlowRenderer = ({
panOnScrollMode={panOnScrollMode}
zoomOnDoubleClick={zoomOnDoubleClick}
panOnDrag={panOnDrag}
defaultPosition={defaultPosition}
defaultZoom={defaultZoom}
defaultViewport={defaultViewport}
zoomActivationKeyCode={zoomActivationKeyCode}
preventScrolling={preventScrolling}
noWheelClassName={noWheelClassName}
@@ -3,9 +3,9 @@ import React, { memo } from 'react';
import FlowRenderer from '../FlowRenderer';
import NodeRenderer from '../NodeRenderer';
import EdgeRenderer from '../EdgeRenderer';
import Viewport from '../Viewport';
import ViewportWrapper from '../Viewport';
import useOnInitHandler from '../../hooks/useOnInitHandler';
import { NodeTypesWrapped, EdgeTypesWrapped, ConnectionLineType, KeyCode, ReactFlowProps } from '../../types';
import { NodeTypesWrapped, EdgeTypesWrapped, ConnectionLineType, KeyCode, ReactFlowProps, Viewport } from '../../types';
export interface GraphViewProps
extends Omit<ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes'> {
@@ -16,13 +16,12 @@ export interface GraphViewProps
multiSelectionKeyCode: KeyCode | null;
connectionLineType: ConnectionLineType;
onlyRenderVisibleElements: boolean;
defaultZoom: number;
defaultPosition: [number, number];
defaultMarkerColor: string;
selectNodesOnDrag: boolean;
noDragClassName: string;
noWheelClassName: string;
noPanClassName: string;
defaultViewport: Viewport;
}
const GraphView = ({
@@ -52,8 +51,7 @@ const GraphView = ({
onlyRenderVisibleElements,
elementsSelectable,
selectNodesOnDrag,
defaultZoom,
defaultPosition,
defaultViewport,
preventScrolling,
defaultMarkerColor,
zoomOnScroll,
@@ -108,15 +106,14 @@ const GraphView = ({
panOnScrollSpeed={panOnScrollSpeed}
panOnScrollMode={panOnScrollMode}
panOnDrag={panOnDrag}
defaultPosition={defaultPosition}
defaultZoom={defaultZoom}
defaultViewport={defaultViewport}
onSelectionContextMenu={onSelectionContextMenu}
preventScrolling={preventScrolling}
noDragClassName={noDragClassName}
noWheelClassName={noWheelClassName}
noPanClassName={noPanClassName}
>
<Viewport>
<ViewportWrapper>
<EdgeRenderer
edgeTypes={edgeTypes}
onEdgeClick={onEdgeClick}
@@ -152,7 +149,7 @@ const GraphView = ({
noPanClassName={noPanClassName}
noDragClassName={noDragClassName}
/>
</Viewport>
</ViewportWrapper>
</FlowRenderer>
);
};
@@ -22,6 +22,7 @@ import {
PanOnScrollMode,
ReactFlowProps,
ReactFlowRefType,
Viewport,
} from '../../types';
import { createEdgeTypes } from '../EdgeRenderer/utils';
import GraphView from '../GraphView';
@@ -44,7 +45,7 @@ const defaultEdgeTypes: EdgeTypes = {
};
const initSnapGrid: [number, number] = [15, 15];
const initDefaultPosition: [number, number] = [0, 0];
const initDefaultViewport: Viewport = { x: 0, y: 0, zoom: 1 };
const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
(
@@ -102,8 +103,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
elementsSelectable,
minZoom,
maxZoom,
defaultZoom = 1,
defaultPosition = initDefaultPosition,
defaultViewport = initDefaultViewport,
translateExtent,
preventScrolling = true,
nodeExtent,
@@ -177,8 +177,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
zoomActivationKeyCode={zoomActivationKeyCode}
onlyRenderVisibleElements={onlyRenderVisibleElements}
selectNodesOnDrag={selectNodesOnDrag}
defaultZoom={defaultZoom}
defaultPosition={defaultPosition}
defaultViewport={defaultViewport}
preventScrolling={preventScrolling}
zoomOnScroll={zoomOnScroll}
zoomOnPinch={zoomOnPinch}
@@ -45,8 +45,7 @@ const ZoomPane = ({
selectionKeyPressed,
elementsSelectable,
panOnDrag = true,
defaultPosition = [0, 0],
defaultZoom = 1,
defaultViewport,
zoomActivationKeyCode,
preventScrolling = true,
children,
@@ -68,9 +67,9 @@ const ZoomPane = ({
const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);
const selection = select(zoomPane.current as Element).call(d3ZoomInstance);
const clampedX = clamp(defaultPosition[0], translateExtent[0][0], translateExtent[1][0]);
const clampedY = clamp(defaultPosition[1], translateExtent[0][1], translateExtent[1][1]);
const clampedZoom = clamp(defaultZoom, minZoom, maxZoom);
const clampedX = clamp(defaultViewport.x, translateExtent[0][0], translateExtent[1][0]);
const clampedY = clamp(defaultViewport.y, translateExtent[0][1], translateExtent[1][1]);
const clampedZoom = clamp(defaultViewport.zoom, minZoom, maxZoom);
const updatedTransform = zoomIdentity.translate(clampedX, clampedY).scale(clampedZoom);
d3ZoomInstance.transform(selection, updatedTransform);
+2 -2
View File
@@ -32,6 +32,7 @@ import {
NodeDragHandler,
NodeMouseHandler,
SelectionDragHandler,
Viewport,
} from '.';
import { HandleType } from './handles';
@@ -98,8 +99,7 @@ export interface ReactFlowProps extends HTMLAttributes<HTMLDivElement> {
panOnDrag?: boolean;
minZoom?: number;
maxZoom?: number;
defaultZoom?: number;
defaultPosition?: [number, number];
defaultViewport?: Viewport;
translateExtent?: CoordinateExtent;
preventScrolling?: boolean;
nodeExtent?: CoordinateExtent;