refactor(graphview): use one hook
This commit is contained in:
@@ -38,7 +38,7 @@ const BasicFlow = () => {
|
||||
const onConnect = useCallback((params: Edge | Connection, nds: Node[]) => {
|
||||
setEdges((eds) => addEdge(params, nds, eds));
|
||||
}, []);
|
||||
const onLoad = (reactFlowInstance: OnLoadParams) => setRfInstance(reactFlowInstance);
|
||||
const onLoad = useCallback((reactFlowInstance: OnLoadParams) => setRfInstance(reactFlowInstance), []);
|
||||
|
||||
const updatePos = () => {
|
||||
setNodes((nds) => {
|
||||
|
||||
@@ -7,7 +7,7 @@ type ElementsCollection = {
|
||||
|
||||
export function getElements(xElements: number = 10, yElements: number = 10): ElementsCollection {
|
||||
const initialNodes = [];
|
||||
const initialEdges = [];
|
||||
const initialEdges: Edge[] = [];
|
||||
let nodeId = 1;
|
||||
let recentNodeId = null;
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import useZoomPanHelper from '../../hooks/useZoomPanHelper';
|
||||
|
||||
import { ReactFlowProps } from '../ReactFlow';
|
||||
|
||||
import { NodeTypesType, EdgeTypesType, ConnectionLineType, KeyCode } from '../../types';
|
||||
import { NodeTypesType, EdgeTypesType, ConnectionLineType, KeyCode, ReactFlowState } from '../../types';
|
||||
|
||||
export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges'> {
|
||||
nodeTypes: NodeTypesType;
|
||||
@@ -27,6 +27,25 @@ export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange'
|
||||
selectNodesOnDrag: boolean;
|
||||
}
|
||||
|
||||
const selector = (s: ReactFlowState) => ({
|
||||
setOnConnect: s.setOnConnect,
|
||||
setOnConnectStart: s.setOnConnectStart,
|
||||
setOnConnectStop: s.setOnConnectStop,
|
||||
setOnConnectEnd: s.setOnConnectEnd,
|
||||
setSnapGrid: s.setSnapGrid,
|
||||
setSnapToGrid: s.setSnapToGrid,
|
||||
setNodesDraggable: s.setNodesDraggable,
|
||||
setNodesConnectable: s.setNodesConnectable,
|
||||
setElementsSelectable: s.setElementsSelectable,
|
||||
setMinZoom: s.setMinZoom,
|
||||
setMaxZoom: s.setMaxZoom,
|
||||
setTranslateExtent: s.setTranslateExtent,
|
||||
setNodeExtent: s.setNodeExtent,
|
||||
setConnectionMode: s.setConnectionMode,
|
||||
setOnNodesChange: s.setOnNodesChange,
|
||||
setOnEdgesChange: s.setOnEdgesChange,
|
||||
});
|
||||
|
||||
const GraphView = ({
|
||||
nodeTypes,
|
||||
edgeTypes,
|
||||
@@ -99,22 +118,25 @@ const GraphView = ({
|
||||
}: GraphViewProps) => {
|
||||
const isInitialized = useRef<boolean>(false);
|
||||
const store = useStoreApi();
|
||||
const setOnConnect = useStore((s) => s.setOnConnect);
|
||||
const setOnConnectStart = useStore((s) => s.setOnConnectStart);
|
||||
const setOnConnectStop = useStore((s) => s.setOnConnectStop);
|
||||
const setOnConnectEnd = useStore((s) => s.setOnConnectEnd);
|
||||
const setSnapGrid = useStore((s) => s.setSnapGrid);
|
||||
const setSnapToGrid = useStore((s) => s.setSnapToGrid);
|
||||
const setNodesDraggable = useStore((s) => s.setNodesDraggable);
|
||||
const setNodesConnectable = useStore((s) => s.setNodesConnectable);
|
||||
const setElementsSelectable = useStore((s) => s.setElementsSelectable);
|
||||
const setMinZoom = useStore((s) => s.setMinZoom);
|
||||
const setMaxZoom = useStore((s) => s.setMaxZoom);
|
||||
const setTranslateExtent = useStore((s) => s.setTranslateExtent);
|
||||
const setNodeExtent = useStore((s) => s.setNodeExtent);
|
||||
const setConnectionMode = useStore((s) => s.setConnectionMode);
|
||||
const setOnNodesChange = useStore((s) => s.setOnNodesChange);
|
||||
const setOnEdgesChange = useStore((s) => s.setOnEdgesChange);
|
||||
|
||||
const {
|
||||
setOnConnect,
|
||||
setOnConnectStart,
|
||||
setOnConnectStop,
|
||||
setOnConnectEnd,
|
||||
setSnapGrid,
|
||||
setSnapToGrid,
|
||||
setNodesDraggable,
|
||||
setNodesConnectable,
|
||||
setElementsSelectable,
|
||||
setMinZoom,
|
||||
setMaxZoom,
|
||||
setTranslateExtent,
|
||||
setNodeExtent,
|
||||
setConnectionMode,
|
||||
setOnNodesChange,
|
||||
setOnEdgesChange,
|
||||
} = useStore(selector);
|
||||
|
||||
const { zoomIn, zoomOut, zoomTo, transform, fitView, initialized } = useZoomPanHelper();
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// import './wdyr';
|
||||
|
||||
import ReactFlow from './container/ReactFlow';
|
||||
|
||||
export default ReactFlow;
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/// <reference types="@welldone-software/why-did-you-render" />
|
||||
|
||||
import React from 'react';
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const whyDidYouRender = require('@welldone-software/why-did-you-render');
|
||||
whyDidYouRender(React, {
|
||||
trackAllPureComponents: true,
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user