import { useTranslation } from "react-i18next"; import { type RegionConfig } from "../config/RegionConfig"; import { type Estimate } from "../routes/estimates-$id"; import LineIcon from "./LineIcon"; interface RegularTableProps { data: Estimate[]; dataDate: Date | null; regionConfig: RegionConfig; } export const RegularTable: React.FC = ({ data, dataDate, regionConfig, }) => { const { t } = useTranslation(); const absoluteArrivalTime = (minutes: number) => { const now = new Date(); const arrival = new Date(now.getTime() + minutes * 60000); return Intl.DateTimeFormat( typeof navigator !== "undefined" ? navigator.language : "en", { hour: "2-digit", minute: "2-digit", } ).format(arrival); }; const formatDistance = (meters: number) => { if (meters > 1024) { return `${(meters / 1000).toFixed(1)} km`; } else { return `${meters} ${t("estimates.meters", "m")}`; } }; return ( {regionConfig.showMeters && ( )} {data .sort((a, b) => a.minutes - b.minutes) .map((estimate, idx) => ( {regionConfig.showMeters && ( )} ))} {data?.length === 0 && ( )}
{t("estimates.caption", "Estimaciones de llegadas a las {{time}}", { time: dataDate?.toLocaleTimeString(), })}
{t("estimates.line", "LĂ­nea")} {t("estimates.route", "Ruta")} {t("estimates.arrival", "Llegada")}{t("estimates.distance", "Distancia")}
{estimate.route} {estimate.minutes > 15 ? absoluteArrivalTime(estimate.minutes) : `${estimate.minutes} ${t("estimates.minutes", "min")}`} {estimate.meters > -1 ? formatDistance(estimate.meters) : t("estimates.not_available", "No disponible")}
{t("estimates.none", "No hay estimaciones disponibles")}
); };