From 89d83f305db69f5bf86a4290341785b2673c35d0 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Mon, 1 Dec 2025 00:10:58 +0100 Subject: Add line list with link to official schedules --- src/frontend/app/routes/home.tsx | 108 ++++++++++++++++++++------------------ src/frontend/app/routes/lines.tsx | 37 +++++++++++++ 2 files changed, 95 insertions(+), 50 deletions(-) create mode 100644 src/frontend/app/routes/lines.tsx (limited to 'src/frontend/app/routes') diff --git a/src/frontend/app/routes/home.tsx b/src/frontend/app/routes/home.tsx index cb640c3..5d56b48 100644 --- a/src/frontend/app/routes/home.tsx +++ b/src/frontend/app/routes/home.tsx @@ -259,7 +259,7 @@ export default function StopList() { {/* Search Results */} - {searchResults && searchResults.length > 0 && ( + {searchResults && searchResults.length > 0 ? (

{t("stoplist.search_results", "Resultados de la búsqueda")} @@ -270,58 +270,66 @@ export default function StopList() { ))}

- )} - - {/* Favourites Gallery */} - {!loading && ( - a.stopId - b.stopId)} - title={t("stoplist.favourites")} - emptyMessage={t("stoplist.no_favourites")} - /> - )} - - {/* Recent Stops Gallery - only show if no favourites */} - {!loading && favouriteStops.length === 0 && ( - - )} - - {/**/} - - {/* All Stops / Nearby Stops */} -
-
- {userLocation && ( - - - - - )} -

- {userLocation - ? t("stoplist.nearby_stops", "Nearby stops") - : t("stoplist.all_stops", "Paradas")} -

+ ) : searchResults !== null ? ( +
+

+ {t("stoplist.no_results", "No se encontraron resultados")} +

+ ) : ( + <> + {/* Favourites Gallery */} + {!loading && ( + a.stopId - b.stopId)} + title={t("stoplist.favourites")} + emptyMessage={t("stoplist.no_favourites")} + /> + )} -
    - {loading && ( - <> - {Array.from({ length: 6 }, (_, index) => ( - - ))} - + {/* Recent Stops Gallery - only show if no favourites */} + {!loading && favouriteStops.length === 0 && ( + )} - {!loading && data - ? (userLocation ? sortedAllStops.slice(0, 6) : sortedAllStops).map( - (stop) => - ) - : null} -
-
+ + {/**/} + + {/* All Stops / Nearby Stops */} +
+
+ {userLocation && ( + + + + + )} +

+ {userLocation + ? t("stoplist.nearby_stops", "Nearby stops") + : t("stoplist.all_stops", "Paradas")} +

+
+ +
    + {loading && ( + <> + {Array.from({ length: 6 }, (_, index) => ( + + ))} + + )} + {!loading && data + ? (userLocation ? sortedAllStops.slice(0, 6) : sortedAllStops).map( + (stop) => + ) + : null} +
+
+ + )}
); } diff --git a/src/frontend/app/routes/lines.tsx b/src/frontend/app/routes/lines.tsx new file mode 100644 index 0000000..658716f --- /dev/null +++ b/src/frontend/app/routes/lines.tsx @@ -0,0 +1,37 @@ +import { useTranslation } from "react-i18next"; +import LineIcon from "~/components/LineIcon"; +import { usePageTitle } from "~/contexts/PageTitleContext"; +import { VIGO_LINES } from "~/data/LinesData"; +import '../tailwind-full.css'; + +export default function LinesPage() { + const { t } = useTranslation(); + usePageTitle(t("navbar.lines", "Líneas")); + + return ( +
+

+ {t("lines.description", "A continuación se muestra una lista de las líneas de autobús urbano de Vigo con sus respectivas rutas y enlaces a los horarios oficiales.")} +

+ +
+ {VIGO_LINES.map((line) => ( + + +
+

+ {line.routeName} +

+
+
+ ))} +
+
+ ); +} -- cgit v1.3