import { useEffect, useState } from "react"; import { Link, useParams } from "react-router"; import { StopDataProvider } from "../data/StopDataProvider"; import LineIcon from "../components/LineIcon"; import { Star } from 'lucide-react'; import "../styles/Estimates.css"; interface StopDetails { stop: { id: number; name: string; latitude: number; longitude: number; } estimates: { line: string; route: string; minutes: number; meters: number; }[] } export function Estimates(): JSX.Element { const sdp = new StopDataProvider(); const [data, setData] = useState(null); const [dataDate, setDataDate] = useState(null); const [favourited, setFavourited] = useState(false); const params = useParams(); const loadData = () => { fetch(`/api/GetStopEstimates?id=${params.stopId}`) .then(r => r.json()) .then((body: StopDetails) => { setData(body); setDataDate(new Date()); }); }; useEffect(() => { loadData(); sdp.pushRecent(parseInt(params.stopId ?? "")); setFavourited( sdp.isFavourite(parseInt(params.stopId ?? "")) ); }, []); const absoluteArrivalTime = (minutes: number) => { const now = new Date() const arrival = new Date(now.getTime() + minutes * 60000) return Intl.DateTimeFormat(navigator.language, { hour: '2-digit', minute: '2-digit' }).format(arrival) } const formatDistance = (meters: number) => { if (meters > 1024) { return `${(meters / 1000).toFixed(1)} km`; } else { return `${meters} m`; } } const toggleFavourite = () => { if (favourited) { sdp.removeFavourite(parseInt(params.stopId ?? "")); setFavourited(false); } else { sdp.addFavourite(parseInt(params.stopId ?? "")); setFavourited(true); } } if (data === null) return

Cargando datos en tiempo real...

return (

{data?.stop.name} ({data?.stop.id})

{data.estimates .sort((a, b) => a.minutes - b.minutes) .map((estimate, idx) => ( ))} {data?.estimates.length === 0 && ( )}
Estimaciones de llegadas a las {dataDate?.toLocaleTimeString()}
LĂ­nea Ruta Minutos Metros
{estimate.route} {estimate.minutes > 15 ? absoluteArrivalTime(estimate.minutes) : `${estimate.minutes} min`} {estimate.meters > -1 ? formatDistance(estimate.meters) : "No disponible" }
No hay estimaciones disponibles
) }