|  | import { useCamera, useSigma } from '@react-sigma/core' | 
					
						
						|  | import { useEffect } from 'react' | 
					
						
						|  | import { useGraphStore } from '@/stores/graph' | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | const FocusOnNode = ({ node, move }: { node: string | null; move?: boolean }) => { | 
					
						
						|  | const sigma = useSigma() | 
					
						
						|  | const { gotoNode } = useCamera() | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | useEffect(() => { | 
					
						
						|  | const graph = sigma.getGraph(); | 
					
						
						|  |  | 
					
						
						|  | if (move) { | 
					
						
						|  | if (node && graph.hasNode(node)) { | 
					
						
						|  | try { | 
					
						
						|  | graph.setNodeAttribute(node, 'highlighted', true); | 
					
						
						|  | gotoNode(node); | 
					
						
						|  | } catch (error) { | 
					
						
						|  | console.error('Error focusing on node:', error); | 
					
						
						|  | } | 
					
						
						|  | } else { | 
					
						
						|  |  | 
					
						
						|  | sigma.setCustomBBox(null); | 
					
						
						|  | sigma.getCamera().animate({ x: 0.5, y: 0.5, ratio: 1 }, { duration: 0 }); | 
					
						
						|  | } | 
					
						
						|  | useGraphStore.getState().setMoveToSelectedNode(false); | 
					
						
						|  | } else if (node && graph.hasNode(node)) { | 
					
						
						|  | try { | 
					
						
						|  | graph.setNodeAttribute(node, 'highlighted', true); | 
					
						
						|  | } catch (error) { | 
					
						
						|  | console.error('Error highlighting node:', error); | 
					
						
						|  | } | 
					
						
						|  | } | 
					
						
						|  |  | 
					
						
						|  | return () => { | 
					
						
						|  | if (node && graph.hasNode(node)) { | 
					
						
						|  | try { | 
					
						
						|  | graph.setNodeAttribute(node, 'highlighted', false); | 
					
						
						|  | } catch (error) { | 
					
						
						|  | console.error('Error cleaning up node highlight:', error); | 
					
						
						|  | } | 
					
						
						|  | } | 
					
						
						|  | } | 
					
						
						|  | }, [node, move, sigma, gotoNode]) | 
					
						
						|  |  | 
					
						
						|  | return null | 
					
						
						|  | } | 
					
						
						|  |  | 
					
						
						|  | export default FocusOnNode | 
					
						
						|  |  |