refactor(props): merge defaultPosition and defaultZoom to defaultViewport #2313
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import React, { MouseEvent } from 'react';
|
import React, { MouseEvent, useCallback } from 'react';
|
||||||
import ReactFlow, {
|
import ReactFlow, {
|
||||||
addEdge,
|
addEdge,
|
||||||
Connection,
|
Connection,
|
||||||
@@ -18,8 +18,6 @@ import MiniMap from '@react-flow/minimap';
|
|||||||
import CustomEdge from './CustomEdge';
|
import CustomEdge from './CustomEdge';
|
||||||
import CustomEdge2 from './CustomEdge2';
|
import CustomEdge2 from './CustomEdge2';
|
||||||
|
|
||||||
const onInit = (reactFlowInstance: ReactFlowInstance) =>
|
|
||||||
reactFlowInstance.fitView();
|
|
||||||
const onNodeDragStop = (_: MouseEvent, node: Node) =>
|
const onNodeDragStop = (_: MouseEvent, node: Node) =>
|
||||||
console.log('drag stop', node);
|
console.log('drag stop', node);
|
||||||
const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node);
|
const onNodeClick = (_: MouseEvent, node: Node) => console.log('click', node);
|
||||||
@@ -183,11 +181,19 @@ const edgeTypes: EdgeTypes = {
|
|||||||
custom2: CustomEdge2,
|
custom2: CustomEdge2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const defaultViewport = {
|
||||||
|
x: 200,
|
||||||
|
y: 200,
|
||||||
|
zoom: 0.8,
|
||||||
|
};
|
||||||
|
|
||||||
const EdgesFlow = () => {
|
const EdgesFlow = () => {
|
||||||
const [nodes, , onNodesChange] = useNodesState(initialNodes);
|
const [nodes, , onNodesChange] = useNodesState(initialNodes);
|
||||||
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
|
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
|
||||||
const onConnect = (params: Connection | Edge) =>
|
const onConnect = useCallback(
|
||||||
setEdges((eds) => addEdge(params, eds));
|
(params: Connection | Edge) => setEdges((eds) => addEdge(params, eds)),
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactFlow
|
<ReactFlow
|
||||||
@@ -198,7 +204,6 @@ const EdgesFlow = () => {
|
|||||||
onNodeClick={onNodeClick}
|
onNodeClick={onNodeClick}
|
||||||
onConnect={onConnect}
|
onConnect={onConnect}
|
||||||
onNodeDragStop={onNodeDragStop}
|
onNodeDragStop={onNodeDragStop}
|
||||||
onInit={onInit}
|
|
||||||
snapToGrid={true}
|
snapToGrid={true}
|
||||||
edgeTypes={edgeTypes}
|
edgeTypes={edgeTypes}
|
||||||
onEdgeClick={onEdgeClick}
|
onEdgeClick={onEdgeClick}
|
||||||
@@ -206,6 +211,7 @@ const EdgesFlow = () => {
|
|||||||
onEdgeMouseEnter={onEdgeMouseEnter}
|
onEdgeMouseEnter={onEdgeMouseEnter}
|
||||||
onEdgeMouseMove={onEdgeMouseMove}
|
onEdgeMouseMove={onEdgeMouseMove}
|
||||||
onEdgeMouseLeave={onEdgeMouseLeave}
|
onEdgeMouseLeave={onEdgeMouseLeave}
|
||||||
|
defaultViewport={defaultViewport}
|
||||||
>
|
>
|
||||||
<MiniMap />
|
<MiniMap />
|
||||||
<Controls />
|
<Controls />
|
||||||
|
|||||||
@@ -51,8 +51,7 @@ const FlowRenderer = ({
|
|||||||
panOnScrollMode,
|
panOnScrollMode,
|
||||||
zoomOnDoubleClick,
|
zoomOnDoubleClick,
|
||||||
panOnDrag,
|
panOnDrag,
|
||||||
defaultPosition,
|
defaultViewport,
|
||||||
defaultZoom,
|
|
||||||
preventScrolling,
|
preventScrolling,
|
||||||
onSelectionContextMenu,
|
onSelectionContextMenu,
|
||||||
noWheelClassName,
|
noWheelClassName,
|
||||||
@@ -87,8 +86,7 @@ const FlowRenderer = ({
|
|||||||
panOnScrollMode={panOnScrollMode}
|
panOnScrollMode={panOnScrollMode}
|
||||||
zoomOnDoubleClick={zoomOnDoubleClick}
|
zoomOnDoubleClick={zoomOnDoubleClick}
|
||||||
panOnDrag={panOnDrag}
|
panOnDrag={panOnDrag}
|
||||||
defaultPosition={defaultPosition}
|
defaultViewport={defaultViewport}
|
||||||
defaultZoom={defaultZoom}
|
|
||||||
zoomActivationKeyCode={zoomActivationKeyCode}
|
zoomActivationKeyCode={zoomActivationKeyCode}
|
||||||
preventScrolling={preventScrolling}
|
preventScrolling={preventScrolling}
|
||||||
noWheelClassName={noWheelClassName}
|
noWheelClassName={noWheelClassName}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import React, { memo } from 'react';
|
|||||||
import FlowRenderer from '../FlowRenderer';
|
import FlowRenderer from '../FlowRenderer';
|
||||||
import NodeRenderer from '../NodeRenderer';
|
import NodeRenderer from '../NodeRenderer';
|
||||||
import EdgeRenderer from '../EdgeRenderer';
|
import EdgeRenderer from '../EdgeRenderer';
|
||||||
import Viewport from '../Viewport';
|
import ViewportWrapper from '../Viewport';
|
||||||
import useOnInitHandler from '../../hooks/useOnInitHandler';
|
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
|
export interface GraphViewProps
|
||||||
extends Omit<ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes'> {
|
extends Omit<ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges' | 'nodeTypes' | 'edgeTypes'> {
|
||||||
@@ -16,13 +16,12 @@ export interface GraphViewProps
|
|||||||
multiSelectionKeyCode: KeyCode | null;
|
multiSelectionKeyCode: KeyCode | null;
|
||||||
connectionLineType: ConnectionLineType;
|
connectionLineType: ConnectionLineType;
|
||||||
onlyRenderVisibleElements: boolean;
|
onlyRenderVisibleElements: boolean;
|
||||||
defaultZoom: number;
|
|
||||||
defaultPosition: [number, number];
|
|
||||||
defaultMarkerColor: string;
|
defaultMarkerColor: string;
|
||||||
selectNodesOnDrag: boolean;
|
selectNodesOnDrag: boolean;
|
||||||
noDragClassName: string;
|
noDragClassName: string;
|
||||||
noWheelClassName: string;
|
noWheelClassName: string;
|
||||||
noPanClassName: string;
|
noPanClassName: string;
|
||||||
|
defaultViewport: Viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GraphView = ({
|
const GraphView = ({
|
||||||
@@ -52,8 +51,7 @@ const GraphView = ({
|
|||||||
onlyRenderVisibleElements,
|
onlyRenderVisibleElements,
|
||||||
elementsSelectable,
|
elementsSelectable,
|
||||||
selectNodesOnDrag,
|
selectNodesOnDrag,
|
||||||
defaultZoom,
|
defaultViewport,
|
||||||
defaultPosition,
|
|
||||||
preventScrolling,
|
preventScrolling,
|
||||||
defaultMarkerColor,
|
defaultMarkerColor,
|
||||||
zoomOnScroll,
|
zoomOnScroll,
|
||||||
@@ -108,15 +106,14 @@ const GraphView = ({
|
|||||||
panOnScrollSpeed={panOnScrollSpeed}
|
panOnScrollSpeed={panOnScrollSpeed}
|
||||||
panOnScrollMode={panOnScrollMode}
|
panOnScrollMode={panOnScrollMode}
|
||||||
panOnDrag={panOnDrag}
|
panOnDrag={panOnDrag}
|
||||||
defaultPosition={defaultPosition}
|
defaultViewport={defaultViewport}
|
||||||
defaultZoom={defaultZoom}
|
|
||||||
onSelectionContextMenu={onSelectionContextMenu}
|
onSelectionContextMenu={onSelectionContextMenu}
|
||||||
preventScrolling={preventScrolling}
|
preventScrolling={preventScrolling}
|
||||||
noDragClassName={noDragClassName}
|
noDragClassName={noDragClassName}
|
||||||
noWheelClassName={noWheelClassName}
|
noWheelClassName={noWheelClassName}
|
||||||
noPanClassName={noPanClassName}
|
noPanClassName={noPanClassName}
|
||||||
>
|
>
|
||||||
<Viewport>
|
<ViewportWrapper>
|
||||||
<EdgeRenderer
|
<EdgeRenderer
|
||||||
edgeTypes={edgeTypes}
|
edgeTypes={edgeTypes}
|
||||||
onEdgeClick={onEdgeClick}
|
onEdgeClick={onEdgeClick}
|
||||||
@@ -152,7 +149,7 @@ const GraphView = ({
|
|||||||
noPanClassName={noPanClassName}
|
noPanClassName={noPanClassName}
|
||||||
noDragClassName={noDragClassName}
|
noDragClassName={noDragClassName}
|
||||||
/>
|
/>
|
||||||
</Viewport>
|
</ViewportWrapper>
|
||||||
</FlowRenderer>
|
</FlowRenderer>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import {
|
|||||||
PanOnScrollMode,
|
PanOnScrollMode,
|
||||||
ReactFlowProps,
|
ReactFlowProps,
|
||||||
ReactFlowRefType,
|
ReactFlowRefType,
|
||||||
|
Viewport,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { createEdgeTypes } from '../EdgeRenderer/utils';
|
import { createEdgeTypes } from '../EdgeRenderer/utils';
|
||||||
import GraphView from '../GraphView';
|
import GraphView from '../GraphView';
|
||||||
@@ -44,7 +45,7 @@ const defaultEdgeTypes: EdgeTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initSnapGrid: [number, number] = [15, 15];
|
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>(
|
const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
|
||||||
(
|
(
|
||||||
@@ -102,8 +103,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
|
|||||||
elementsSelectable,
|
elementsSelectable,
|
||||||
minZoom,
|
minZoom,
|
||||||
maxZoom,
|
maxZoom,
|
||||||
defaultZoom = 1,
|
defaultViewport = initDefaultViewport,
|
||||||
defaultPosition = initDefaultPosition,
|
|
||||||
translateExtent,
|
translateExtent,
|
||||||
preventScrolling = true,
|
preventScrolling = true,
|
||||||
nodeExtent,
|
nodeExtent,
|
||||||
@@ -177,8 +177,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
|
|||||||
zoomActivationKeyCode={zoomActivationKeyCode}
|
zoomActivationKeyCode={zoomActivationKeyCode}
|
||||||
onlyRenderVisibleElements={onlyRenderVisibleElements}
|
onlyRenderVisibleElements={onlyRenderVisibleElements}
|
||||||
selectNodesOnDrag={selectNodesOnDrag}
|
selectNodesOnDrag={selectNodesOnDrag}
|
||||||
defaultZoom={defaultZoom}
|
defaultViewport={defaultViewport}
|
||||||
defaultPosition={defaultPosition}
|
|
||||||
preventScrolling={preventScrolling}
|
preventScrolling={preventScrolling}
|
||||||
zoomOnScroll={zoomOnScroll}
|
zoomOnScroll={zoomOnScroll}
|
||||||
zoomOnPinch={zoomOnPinch}
|
zoomOnPinch={zoomOnPinch}
|
||||||
|
|||||||
@@ -45,8 +45,7 @@ const ZoomPane = ({
|
|||||||
selectionKeyPressed,
|
selectionKeyPressed,
|
||||||
elementsSelectable,
|
elementsSelectable,
|
||||||
panOnDrag = true,
|
panOnDrag = true,
|
||||||
defaultPosition = [0, 0],
|
defaultViewport,
|
||||||
defaultZoom = 1,
|
|
||||||
zoomActivationKeyCode,
|
zoomActivationKeyCode,
|
||||||
preventScrolling = true,
|
preventScrolling = true,
|
||||||
children,
|
children,
|
||||||
@@ -68,9 +67,9 @@ const ZoomPane = ({
|
|||||||
const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);
|
const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);
|
||||||
const selection = select(zoomPane.current as Element).call(d3ZoomInstance);
|
const selection = select(zoomPane.current as Element).call(d3ZoomInstance);
|
||||||
|
|
||||||
const clampedX = clamp(defaultPosition[0], translateExtent[0][0], translateExtent[1][0]);
|
const clampedX = clamp(defaultViewport.x, translateExtent[0][0], translateExtent[1][0]);
|
||||||
const clampedY = clamp(defaultPosition[1], translateExtent[0][1], translateExtent[1][1]);
|
const clampedY = clamp(defaultViewport.y, translateExtent[0][1], translateExtent[1][1]);
|
||||||
const clampedZoom = clamp(defaultZoom, minZoom, maxZoom);
|
const clampedZoom = clamp(defaultViewport.zoom, minZoom, maxZoom);
|
||||||
const updatedTransform = zoomIdentity.translate(clampedX, clampedY).scale(clampedZoom);
|
const updatedTransform = zoomIdentity.translate(clampedX, clampedY).scale(clampedZoom);
|
||||||
|
|
||||||
d3ZoomInstance.transform(selection, updatedTransform);
|
d3ZoomInstance.transform(selection, updatedTransform);
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import {
|
|||||||
NodeDragHandler,
|
NodeDragHandler,
|
||||||
NodeMouseHandler,
|
NodeMouseHandler,
|
||||||
SelectionDragHandler,
|
SelectionDragHandler,
|
||||||
|
Viewport,
|
||||||
} from '.';
|
} from '.';
|
||||||
import { HandleType } from './handles';
|
import { HandleType } from './handles';
|
||||||
|
|
||||||
@@ -98,8 +99,7 @@ export interface ReactFlowProps extends HTMLAttributes<HTMLDivElement> {
|
|||||||
panOnDrag?: boolean;
|
panOnDrag?: boolean;
|
||||||
minZoom?: number;
|
minZoom?: number;
|
||||||
maxZoom?: number;
|
maxZoom?: number;
|
||||||
defaultZoom?: number;
|
defaultViewport?: Viewport;
|
||||||
defaultPosition?: [number, number];
|
|
||||||
translateExtent?: CoordinateExtent;
|
translateExtent?: CoordinateExtent;
|
||||||
preventScrolling?: boolean;
|
preventScrolling?: boolean;
|
||||||
nodeExtent?: CoordinateExtent;
|
nodeExtent?: CoordinateExtent;
|
||||||
|
|||||||
Reference in New Issue
Block a user