refactor(graphview): use one hook

This commit is contained in:
moklick
2021-10-13 13:52:45 +02:00
parent ee0d29029a
commit 3f8c252096
5 changed files with 53 additions and 19 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ const BasicFlow = () => {
const onConnect = useCallback((params: Edge | Connection, nds: Node[]) => { const onConnect = useCallback((params: Edge | Connection, nds: Node[]) => {
setEdges((eds) => addEdge(params, nds, eds)); setEdges((eds) => addEdge(params, nds, eds));
}, []); }, []);
const onLoad = (reactFlowInstance: OnLoadParams) => setRfInstance(reactFlowInstance); const onLoad = useCallback((reactFlowInstance: OnLoadParams) => setRfInstance(reactFlowInstance), []);
const updatePos = () => { const updatePos = () => {
setNodes((nds) => { setNodes((nds) => {
+1 -1
View File
@@ -7,7 +7,7 @@ type ElementsCollection = {
export function getElements(xElements: number = 10, yElements: number = 10): ElementsCollection { export function getElements(xElements: number = 10, yElements: number = 10): ElementsCollection {
const initialNodes = []; const initialNodes = [];
const initialEdges = []; const initialEdges: Edge[] = [];
let nodeId = 1; let nodeId = 1;
let recentNodeId = null; let recentNodeId = null;
+39 -17
View File
@@ -9,7 +9,7 @@ import useZoomPanHelper from '../../hooks/useZoomPanHelper';
import { ReactFlowProps } from '../ReactFlow'; 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'> { export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges'> {
nodeTypes: NodeTypesType; nodeTypes: NodeTypesType;
@@ -27,6 +27,25 @@ export interface GraphViewProps extends Omit<ReactFlowProps, 'onSelectionChange'
selectNodesOnDrag: boolean; 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 = ({ const GraphView = ({
nodeTypes, nodeTypes,
edgeTypes, edgeTypes,
@@ -99,22 +118,25 @@ const GraphView = ({
}: GraphViewProps) => { }: GraphViewProps) => {
const isInitialized = useRef<boolean>(false); const isInitialized = useRef<boolean>(false);
const store = useStoreApi(); const store = useStoreApi();
const setOnConnect = useStore((s) => s.setOnConnect);
const setOnConnectStart = useStore((s) => s.setOnConnectStart); const {
const setOnConnectStop = useStore((s) => s.setOnConnectStop); setOnConnect,
const setOnConnectEnd = useStore((s) => s.setOnConnectEnd); setOnConnectStart,
const setSnapGrid = useStore((s) => s.setSnapGrid); setOnConnectStop,
const setSnapToGrid = useStore((s) => s.setSnapToGrid); setOnConnectEnd,
const setNodesDraggable = useStore((s) => s.setNodesDraggable); setSnapGrid,
const setNodesConnectable = useStore((s) => s.setNodesConnectable); setSnapToGrid,
const setElementsSelectable = useStore((s) => s.setElementsSelectable); setNodesDraggable,
const setMinZoom = useStore((s) => s.setMinZoom); setNodesConnectable,
const setMaxZoom = useStore((s) => s.setMaxZoom); setElementsSelectable,
const setTranslateExtent = useStore((s) => s.setTranslateExtent); setMinZoom,
const setNodeExtent = useStore((s) => s.setNodeExtent); setMaxZoom,
const setConnectionMode = useStore((s) => s.setConnectionMode); setTranslateExtent,
const setOnNodesChange = useStore((s) => s.setOnNodesChange); setNodeExtent,
const setOnEdgesChange = useStore((s) => s.setOnEdgesChange); setConnectionMode,
setOnNodesChange,
setOnEdgesChange,
} = useStore(selector);
const { zoomIn, zoomOut, zoomTo, transform, fitView, initialized } = useZoomPanHelper(); const { zoomIn, zoomOut, zoomTo, transform, fitView, initialized } = useZoomPanHelper();
+2
View File
@@ -1,3 +1,5 @@
// import './wdyr';
import ReactFlow from './container/ReactFlow'; import ReactFlow from './container/ReactFlow';
export default ReactFlow; export default ReactFlow;
+10
View File
@@ -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,
});
}