8
8
ReactFlow ,
9
9
addEdge ,
10
10
useEdgesState ,
11
- useNodesState , NodeTypes ,
11
+ useNodesState , NodeTypes , useReactFlow ,
12
12
} from '@xyflow/react' ;
13
13
import { type MouseEvent as ReactMouseEvent , useCallback , useEffect } from 'react' ;
14
14
import { MdRefresh } from 'react-icons/md' ;
@@ -38,9 +38,10 @@ const nodeTypes = {
38
38
export default function Flow ( ) {
39
39
const [ nodes , setNodes , onNodesChange ] = useNodesState < Node > ( [ ] ) ;
40
40
const [ edges , setEdges , onEdgesChange ] = useEdgesState < Edge > ( [ ] ) ;
41
+ const reactFlow = useReactFlow ( ) ;
41
42
const { setLineageInfo } = useLineageLayout ( { setNodes, setEdges, addEdge } ) ;
42
43
43
- const setActiveNode = useCallback ( ( nodeId : string ) => {
44
+ const setActiveNode = useCallback ( async ( nodeId : string ) => {
44
45
const newNodes = nodes . map ( n => ( {
45
46
...n ,
46
47
data : {
@@ -49,11 +50,15 @@ export default function Flow() {
49
50
}
50
51
} ) ) ;
51
52
setNodes ( newNodes ) ;
52
- } , [ nodes , setNodes ] ) ;
53
+ const newActiveNode = nodes . find ( n => n . id === nodeId ) ;
54
+ if ( newActiveNode ) {
55
+ await reactFlow . setCenter ( newActiveNode . position . x , newActiveNode . position . y , { duration : 100 , zoom : reactFlow . getZoom ( ) } ) ;
56
+ }
57
+ } , [ reactFlow , nodes , setNodes ] ) ;
53
58
54
59
55
- function onNodeClick ( _event : ReactMouseEvent , node : Node ) : void {
56
- setActiveNode ( node . id ) ;
60
+ async function onNodeClick ( _event : ReactMouseEvent , node : Node ) : Promise < void > {
61
+ await setActiveNode ( node . id ) ;
57
62
if ( isDevMode ) {
58
63
return ;
59
64
}
0 commit comments