import { useState, useEffect } from 'react'; import { useAuth } from '../src/context/AuthContext'; import FileUpload from '../src/components/routes/FileUpload'; import RouteList from '../src/components/routes/RouteList'; import RouteFilter from '../src/components/routes/RouteFilter'; import LoadingSpinner from '../src/components/LoadingSpinner'; const RoutesPage = () => { const { apiKey } = useAuth(); const [routes, setRoutes] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [filters, setFilters] = useState({ searchQuery: '', minDistance: 0, maxDistance: 500, difficulty: 'all', }); useEffect(() => { const fetchRoutes = async () => { try { const response = await fetch('/api/routes', { headers: { 'X-API-Key': apiKey } }); if (!response.ok) throw new Error('Failed to fetch routes'); const data = await response.json(); setRoutes(data.routes); } catch (err) { setError(err.message); } finally { setLoading(false); } }; fetchRoutes(); }, [apiKey]); const filteredRoutes = routes.filter(route => { const matchesSearch = route.name.toLowerCase().includes(filters.searchQuery.toLowerCase()); const matchesDistance = route.distance >= filters.minDistance && route.distance <= filters.maxDistance; const matchesDifficulty = filters.difficulty === 'all' || route.difficulty === filters.difficulty; return matchesSearch && matchesDistance && matchesDifficulty; }); const handleUploadSuccess = (newRoute) => { setRoutes(prev => [...prev, newRoute]); }; return (

Routes

{loading ? ( ) : error ? (
{error}
) : ( )}
); }; export default RoutesPage;