import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router"; import { fetchRoutes } from "~/api/transit"; import LineIcon from "~/components/LineIcon"; import { usePageTitle } from "~/contexts/PageTitleContext"; import "../tailwind-full.css"; export default function RoutesPage() { const { t } = useTranslation(); usePageTitle(t("navbar.routes", "Rutas")); const [searchQuery, setSearchQuery] = useState(""); const orderedAgencies = [ "vitrasa", "tranvias", "tussa", "ourense", "feve", "shuttle", ]; const { data: routes, isLoading } = useQuery({ queryKey: ["routes"], queryFn: () => fetchRoutes(orderedAgencies), }); const filteredRoutes = routes?.filter( (route) => route.shortName?.toLowerCase().includes(searchQuery.toLowerCase()) || route.longName?.toLowerCase().includes(searchQuery.toLowerCase()) ); const routesByAgency = filteredRoutes?.reduce( (acc, route) => { const agency = route.agencyName || t("routes.unknown_agency", "Otros"); if (!acc[agency]) acc[agency] = []; acc[agency].push(route); return acc; }, {} as Record ); return (
setSearchQuery(e.target.value)} />
{isLoading && (
)}
{routesByAgency && Object.entries(routesByAgency) .sort(([a], [b]) => { const indexA = orderedAgencies.indexOf(a.toLowerCase()); const indexB = orderedAgencies.indexOf(b.toLowerCase()); if (indexA === -1 && indexB === -1) { return a.localeCompare(b); } if (indexA === -1) return 1; if (indexB === -1) return -1; return indexA - indexB; }) .map(([agency, agencyRoutes]) => (

{agency}

{agencyRoutes.map((route) => (

{route.longName}

))}
))}
); }