22 Background ,
33 BackgroundVariant ,
44 Controls ,
5- type EdgeChange ,
65 type EdgeTypes ,
7- type NodeChange ,
86 type NodeTypes ,
97 ReactFlow ,
108 type SetCenter ,
@@ -13,14 +11,12 @@ import {
1311 getOutgoers ,
1412 useReactFlow ,
1513 useViewport ,
16- applyNodeChanges ,
17- applyEdgeChanges ,
1814} from '@xyflow/react'
1915
2016import '@xyflow/react/dist/style.css'
2117import './Lineage.css'
2218
23- import { CircuitBoard , Crosshair , LocateFixed , RotateCcw } from 'lucide-react'
19+ import { CircuitBoard , LocateFixed , RotateCcw } from 'lucide-react'
2420import React from 'react'
2521
2622import { type LineageContextHook } from './LineageContext'
@@ -60,13 +56,10 @@ export function LineageLayoutBase<
6056 edgeTypes,
6157 className,
6258 controls,
63- nodesDraggable = false ,
64- nodesConnectable = false ,
6559 useLineage,
6660 onNodeClick,
6761 onNodeDoubleClick,
6862 showControlOnlySelectedNodes = true ,
69- showControlZoomToCurrentNode = true ,
7063 showControlZoomToSelectedNode = true ,
7164} : {
7265 useLineage : LineageContextHook <
@@ -79,17 +72,14 @@ export function LineageLayoutBase<
7972 TSourceHandleID ,
8073 TTargetHandleID
8174 >
82- nodesDraggable ?: boolean
83- nodesConnectable ?: boolean
8475 nodeTypes ?: NodeTypes
8576 edgeTypes ?: EdgeTypes
8677 className ?: string
8778 showControlOnlySelectedNodes ?: boolean
88- showControlZoomToCurrentNode ?: boolean
8979 showControlZoomToSelectedNode ?: boolean
9080 controls ?:
91- | React . ReactNode
92- | ( ( { setCenter } : { setCenter : SetCenter } ) => React . ReactNode )
81+ | React . ReactNode
82+ | ( ( { setCenter } : { setCenter : SetCenter } ) => React . ReactNode )
9383 onNodeClick ?: (
9484 event : React . MouseEvent < Element , MouseEvent > ,
9585 node : LineageNode < TNodeData , TNodeID > ,
@@ -103,74 +93,20 @@ export function LineageLayoutBase<
10393 const { setCenter } = useReactFlow ( )
10494
10595 const {
106- currentNode,
10796 zoom,
108- nodes : initialNodes ,
97+ nodes,
10998 edges,
110- setEdges,
11199 selectedNode,
112100 showOnlySelectedNodes,
113101 selectedNodeId,
114102 setZoom,
115- setSelectedNodeId,
116103 setShowOnlySelectedNodes,
117104 setSelectedNodes,
118105 setSelectedEdges,
119106 } = useLineage ( )
120107
121- const [ nodes , setNodes ] =
122- React . useState < LineageNode < TNodeData , TNodeID > [ ] > ( initialNodes )
123-
124- const onNodesChange = React . useCallback (
125- ( changes : NodeChange < LineageNode < TNodeData , TNodeID > > [ ] ) => {
126- setNodes ( applyNodeChanges ( changes , nodes ) )
127- } ,
128- [ nodes ] ,
129- )
130-
131- const onEdgesChange = React . useCallback (
132- (
133- changes : EdgeChange <
134- LineageEdge <
135- TEdgeData ,
136- TEdgeID ,
137- TSourceID ,
138- TTargetID ,
139- TSourceHandleID ,
140- TTargetHandleID
141- >
142- > [ ] ,
143- ) => {
144- setEdges (
145- applyEdgeChanges <
146- LineageEdge <
147- TEdgeData ,
148- TEdgeID ,
149- TSourceID ,
150- TTargetID ,
151- TSourceHandleID ,
152- TTargetHandleID
153- >
154- > ( changes , edges ) ,
155- )
156- } ,
157- [ edges ] ,
158- )
159-
160108 const updateZoom = React . useMemo ( ( ) => debounce ( setZoom , 200 ) , [ setZoom ] )
161109
162- const zoomToCurrentNode = React . useCallback (
163- ( zoom : number = DEFAULT_ZOOM ) => {
164- if ( currentNode ) {
165- setCenter ( currentNode . position . x , currentNode . position . y , {
166- zoom,
167- duration : 0 ,
168- } )
169- }
170- } ,
171- [ currentNode ?. position . x , currentNode ?. position . y ] ,
172- )
173-
174110 const zoomToSelectedNode = React . useCallback (
175111 ( zoom : number = DEFAULT_ZOOM ) => {
176112 if ( selectedNode ) {
@@ -195,13 +131,13 @@ export function LineageLayoutBase<
195131 return Array . from (
196132 new Set < LineageNode < TNodeData , TNodeID > > ( [
197133 node ,
198- ...getIncomers ( node , initialNodes , edges )
134+ ...getIncomers ( node , nodes , edges )
199135 . map ( n => getAllIncomers ( n , visited ) )
200136 . flat ( ) ,
201137 ] ) ,
202138 )
203139 } ,
204- [ initialNodes , edges ] ,
140+ [ nodes , edges ] ,
205141 )
206142
207143 const getAllOutgoers = React . useCallback (
@@ -216,13 +152,13 @@ export function LineageLayoutBase<
216152 return Array . from (
217153 new Set < LineageNode < TNodeData , TNodeID > > ( [
218154 node ,
219- ...getOutgoers ( node , initialNodes , edges )
155+ ...getOutgoers ( node , nodes , edges )
220156 . map ( n => getAllOutgoers ( n , visited ) )
221157 . flat ( ) ,
222158 ] ) ,
223159 )
224160 } ,
225- [ initialNodes , edges ] ,
161+ [ nodes , edges ] ,
226162 )
227163
228164 const connectedNodes = React . useMemo ( ( ) => {
@@ -233,12 +169,8 @@ export function LineageLayoutBase<
233169 ...getAllOutgoers ( selectedNode ) ,
234170 ]
235171
236- if ( currentNode ) {
237- all . push ( currentNode )
238- }
239-
240172 return all
241- } , [ selectedNode , currentNode , getAllIncomers , getAllOutgoers ] )
173+ } , [ selectedNode , getAllIncomers , getAllOutgoers ] )
242174
243175 const connectedEdges = React . useMemo ( ( ) => {
244176 return getConnectedEdges <
@@ -254,19 +186,11 @@ export function LineageLayoutBase<
254186 > ( connectedNodes , edges )
255187 } , [ connectedNodes , edges ] )
256188
257- React . useEffect ( ( ) => {
258- setNodes ( initialNodes )
259- } , [ initialNodes ] )
260-
261189 React . useEffect ( ( ) => {
262190 if ( selectedNodeId == null ) {
263191 setShowOnlySelectedNodes ( false )
264192 setSelectedNodes ( new Set ( ) )
265193 setSelectedEdges ( new Set ( ) )
266- } else {
267- if ( selectedNode == null ) {
268- setSelectedNodeId ( null )
269- }
270194 }
271195 } , [ selectedNodeId , selectedNode ] )
272196
@@ -317,17 +241,12 @@ export function LineageLayoutBase<
317241 edges = { edges }
318242 nodeTypes = { nodeTypes }
319243 edgeTypes = { edgeTypes }
320- onNodesChange = { onNodesChange }
321- onEdgesChange = { onEdgesChange }
322- nodesDraggable = { nodesDraggable }
323- nodesConnectable = { nodesConnectable }
324244 zoomOnDoubleClick = { false }
325245 panOnScroll = { true }
326246 zoomOnScroll = { true }
327247 minZoom = { nodes . length > NODES_TRESHOLD ? NODES_TRESHOLD_ZOOM : MIN_ZOOM }
328248 maxZoom = { MAX_ZOOM }
329249 fitView = { false }
330- nodeOrigin = { [ 0.5 , 0.5 ] }
331250 onlyRenderVisibleElements
332251 onNodeClick = { onNodeClick }
333252 onNodeDoubleClick = { onNodeDoubleClick }
@@ -346,14 +265,6 @@ export function LineageLayoutBase<
346265 position = "top-right"
347266 className = "m-1 border-2 border-lineage-control-border rounded-sm overflow-hidden"
348267 >
349- { currentNode && showControlZoomToCurrentNode && (
350- < LineageControlButton
351- text = "Zoom to current node"
352- onClick = { ( ) => zoomToCurrentNode ( DEFAULT_ZOOM ) }
353- >
354- < LineageControlIcon Icon = { Crosshair } />
355- </ LineageControlButton >
356- ) }
357268 { selectedNodeId && (
358269 < >
359270 { showControlOnlySelectedNodes && (
0 commit comments