From bb6366af0c07116ecb54144dca129f099127d4c3 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Fri, 30 Jan 2026 20:48:51 +0100 Subject: feat: Add trip selection functionality and localization updates for trips in English, Spanish, and Galician --- src/frontend/app/i18n/locales/en-GB.json | 4 + src/frontend/app/i18n/locales/es-ES.json | 4 + src/frontend/app/i18n/locales/gl-ES.json | 6 +- src/frontend/app/routes/routes-$id.tsx | 196 ++++++++++++++++++++++++++----- 4 files changed, 178 insertions(+), 32 deletions(-) diff --git a/src/frontend/app/i18n/locales/en-GB.json b/src/frontend/app/i18n/locales/en-GB.json index df895a9..dab0229 100644 --- a/src/frontend/app/i18n/locales/en-GB.json +++ b/src/frontend/app/i18n/locales/en-GB.json @@ -173,6 +173,10 @@ "day_today": "Today", "day_tomorrow": "Tomorrow", "week_date": "Date", + "trips": "Trips", + "choose_trip": "Choose a trip", + "close": "Close", + "trip": "Trip", "trip_count": "{{count}} trips today", "trip_count_one": "1 trip today", "trip_count_short": "({{count}} trips)", diff --git a/src/frontend/app/i18n/locales/es-ES.json b/src/frontend/app/i18n/locales/es-ES.json index 58e2f08..6972410 100644 --- a/src/frontend/app/i18n/locales/es-ES.json +++ b/src/frontend/app/i18n/locales/es-ES.json @@ -173,6 +173,10 @@ "day_today": "Hoy", "day_tomorrow": "Mañana", "week_date": "Fecha", + "trips": "Trayectos", + "choose_trip": "Elige un trayecto", + "close": "Cerrar", + "trip": "Trayecto", "trip_count": "{{count}} viajes hoy", "trip_count_one": "1 viaje hoy", "trip_count_short": "({{count}} viajes)", diff --git a/src/frontend/app/i18n/locales/gl-ES.json b/src/frontend/app/i18n/locales/gl-ES.json index 181915a..0e04ce4 100644 --- a/src/frontend/app/i18n/locales/gl-ES.json +++ b/src/frontend/app/i18n/locales/gl-ES.json @@ -156,7 +156,11 @@ "stops": "Paradas", "planner": "Planificador", "routes": "Rutas", - "favourites": "Favoritos" + "favourites": "Favoritos", + "trips": "Traxectos", + "choose_trip": "Escolle un traxecto", + "close": "Pechar", + "trip": "Traxecto" }, "routes": { "description": "A continuación móstrase unha lista das rutas de autobús urbano cos seus respectivos traxectos.", diff --git a/src/frontend/app/routes/routes-$id.tsx b/src/frontend/app/routes/routes-$id.tsx index 7de16eb..6fe0424 100644 --- a/src/frontend/app/routes/routes-$id.tsx +++ b/src/frontend/app/routes/routes-$id.tsx @@ -1,5 +1,13 @@ import { useQuery } from "@tanstack/react-query"; -import { LayoutGrid, List, Map as MapIcon } from "lucide-react"; +import { + Bus, + ChevronDown, + Clock, + LayoutGrid, + List, + Map as MapIcon, + X, +} from "lucide-react"; import { useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { @@ -28,6 +36,7 @@ export default function RouteDetailsPage() { const [layoutMode, setLayoutMode] = useState<"balanced" | "map" | "list">( "balanced" ); + const [isPatternPickerOpen, setIsPatternPickerOpen] = useState(false); const [selectedWeekDate, setSelectedWeekDate] = useState( () => new Date() ); @@ -148,6 +157,10 @@ export default function RouteDetailsPage() { const selectedPattern = activePatterns.find((p) => p.id === selectedPatternId) || activePatterns[0]; + const selectedPatternLabel = selectedPattern + ? selectedPattern.headsign || selectedPattern.name + : t("routes.details", "Detalles de ruta"); + const mapHeightClass = layoutMode === "map" ? "h-[75%] md:h-[75%]" @@ -312,37 +325,25 @@ export default function RouteDetailsPage() {
- +
+ + {selectedPatternLabel} + + {selectedPattern?.tripCount != null && ( + + {t("routes.trip_count_short", { + count: selectedPattern.tripCount, + })} + + )} + +
+