import { type StopDetails } from "../routes/estimates-$id"; import LineIcon from "./LineIcon"; import { type RegionConfig } from "../data/RegionConfig"; interface GroupedTable { data: StopDetails; dataDate: Date | null; regionConfig: RegionConfig; } export const GroupedTable: React.FC = ({ data, dataDate, regionConfig }) => { const formatDistance = (meters: number) => { if (meters > 1024) { return `${(meters / 1000).toFixed(1)} km`; } else { return `${meters} m`; } }; const groupedEstimates = data.estimates.reduce( (acc, estimate) => { if (!acc[estimate.line]) { acc[estimate.line] = []; } acc[estimate.line].push(estimate); return acc; }, {} as Record, ); const sortedLines = Object.keys(groupedEstimates).sort((a, b) => { const firstArrivalA = groupedEstimates[a][0].minutes; const firstArrivalB = groupedEstimates[b][0].minutes; return firstArrivalA - firstArrivalB; }); return ( {regionConfig.showMeters && } {sortedLines.map((line) => groupedEstimates[line].map((estimate, idx) => ( {idx === 0 && ( )} {regionConfig.showMeters && ( )} )), )} {data?.estimates.length === 0 && ( )}
Estimaciones de llegadas a las {dataDate?.toLocaleTimeString()}
LĂ­nea Ruta LlegadaDistancia
{estimate.route} {`${estimate.minutes} min`} {estimate.meters > -1 ? formatDistance(estimate.meters) : "No disponible"}
No hay estimaciones disponibles
); };