import { memo } from 'react'; import { FlowRenderer } from '../FlowRenderer'; import { NodeRenderer } from '../NodeRenderer'; import { EdgeRenderer } from '../EdgeRenderer'; import { Viewport } from '../Viewport'; import { useOnInitHandler } from '../../hooks/useOnInitHandler'; import { useViewportSync } from '../../hooks/useViewportSync'; import { ConnectionLineWrapper } from '../../components/ConnectionLine'; import { useNodeOrEdgeTypesWarning } from './useNodeOrEdgeTypesWarning'; import type { Edge, Node, ReactFlowProps } from '../../types'; import { useStylesLoadedWarning } from './useStylesLoadedWarning'; export type GraphViewProps = Omit< ReactFlowProps, 'onSelectionChange' | 'nodes' | 'edges' | 'onMove' | 'onMoveStart' | 'onMoveEnd' | 'elevateEdgesOnSelect' > & Required< Pick< ReactFlowProps, | 'selectionKeyCode' | 'deleteKeyCode' | 'multiSelectionKeyCode' | 'connectionLineType' | 'onlyRenderVisibleElements' | 'translateExtent' | 'minZoom' | 'maxZoom' | 'defaultMarkerColor' | 'noDragClassName' | 'noWheelClassName' | 'noPanClassName' | 'defaultViewport' | 'disableKeyboardA11y' | 'nodeOrigin' > > & { rfId: string; }; function GraphViewComponent({ nodeTypes, edgeTypes, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, onEdgeUpdate, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, edgeUpdaterRadius, onEdgeUpdateStart, onEdgeUpdateEnd, noDragClassName, noWheelClassName, noPanClassName, disableKeyboardA11y, nodeOrigin, nodeExtent, rfId, viewport, onViewportChange, }: GraphViewProps) { useNodeOrEdgeTypesWarning(nodeTypes); useNodeOrEdgeTypesWarning(edgeTypes); useStylesLoadedWarning(); useOnInitHandler(onInit); useViewportSync(viewport); return ( onPaneClick={onPaneClick} onPaneMouseEnter={onPaneMouseEnter} onPaneMouseMove={onPaneMouseMove} onPaneMouseLeave={onPaneMouseLeave} onPaneContextMenu={onPaneContextMenu} onPaneScroll={onPaneScroll} deleteKeyCode={deleteKeyCode} selectionKeyCode={selectionKeyCode} selectionOnDrag={selectionOnDrag} selectionMode={selectionMode} onSelectionStart={onSelectionStart} onSelectionEnd={onSelectionEnd} multiSelectionKeyCode={multiSelectionKeyCode} panActivationKeyCode={panActivationKeyCode} zoomActivationKeyCode={zoomActivationKeyCode} elementsSelectable={elementsSelectable} zoomOnScroll={zoomOnScroll} zoomOnPinch={zoomOnPinch} zoomOnDoubleClick={zoomOnDoubleClick} panOnScroll={panOnScroll} panOnScrollSpeed={panOnScrollSpeed} panOnScrollMode={panOnScrollMode} panOnDrag={panOnDrag} defaultViewport={defaultViewport} translateExtent={translateExtent} minZoom={minZoom} maxZoom={maxZoom} onSelectionContextMenu={onSelectionContextMenu} preventScrolling={preventScrolling} noDragClassName={noDragClassName} noWheelClassName={noWheelClassName} noPanClassName={noPanClassName} disableKeyboardA11y={disableKeyboardA11y} onViewportChange={onViewportChange} isControlledViewport={!!viewport} > edgeTypes={edgeTypes} onEdgeClick={onEdgeClick} onEdgeDoubleClick={onEdgeDoubleClick} onEdgeUpdate={onEdgeUpdate} onlyRenderVisibleElements={onlyRenderVisibleElements} onEdgeContextMenu={onEdgeContextMenu} onEdgeMouseEnter={onEdgeMouseEnter} onEdgeMouseMove={onEdgeMouseMove} onEdgeMouseLeave={onEdgeMouseLeave} onEdgeUpdateStart={onEdgeUpdateStart} onEdgeUpdateEnd={onEdgeUpdateEnd} edgeUpdaterRadius={edgeUpdaterRadius} defaultMarkerColor={defaultMarkerColor} noPanClassName={noPanClassName} disableKeyboardA11y={disableKeyboardA11y} rfId={rfId} />
nodeTypes={nodeTypes} onNodeClick={onNodeClick} onNodeDoubleClick={onNodeDoubleClick} onNodeMouseEnter={onNodeMouseEnter} onNodeMouseMove={onNodeMouseMove} onNodeMouseLeave={onNodeMouseLeave} onNodeContextMenu={onNodeContextMenu} onlyRenderVisibleElements={onlyRenderVisibleElements} noPanClassName={noPanClassName} noDragClassName={noDragClassName} disableKeyboardA11y={disableKeyboardA11y} nodeOrigin={nodeOrigin} nodeExtent={nodeExtent} rfId={rfId} />
); } GraphViewComponent.displayName = 'GraphView'; export const GraphView = memo(GraphViewComponent) as typeof GraphViewComponent;