import React, { useState, useRef, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { MapNode } from './MapNode'; import { Connection } from './Connection'; import { galaxyData } from '../data/galaxyData'; interface Position { x: number; y: number; } export const GalaxyMap = () => { const navigate = useNavigate(); const [draggedNode, setDraggedNode] = useState(null); const [nodePositions, setNodePositions] = useState>(galaxyData.nodePositions); const svgRef = useRef(null); const handleNodeClick = (regionId: string) => { navigate(`/regions/${regionId}`); }; const handleMouseDown = useCallback((nodeId: string) => { setDraggedNode(nodeId); }, []); const handleMouseMove = useCallback((e: React.MouseEvent) => { if (!draggedNode || !svgRef.current) return; const rect = svgRef.current.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; setNodePositions(prev => ({ ...prev, [draggedNode]: { x, y } })); }, [draggedNode]); const handleMouseUp = useCallback(() => { setDraggedNode(null); }, []); return (

Galaxy Map

Navigate the known regions of space

{/* Render connections first (behind nodes) */} {galaxyData.connections.map((connection, index) => ( ))} {/* Render nodes */} {galaxyData.regions.map((region) => ( handleNodeClick(region.id)} onMouseDown={() => handleMouseDown(region.id)} isDragging={draggedNode === region.id} type="region" /> ))}
); };