From a1d589c1a0d5a5010e5fe4e8a1ec403ffafb289f Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Sun, 7 Dec 2025 23:33:10 +0100 Subject: Implement Renfe data source --- src/frontend/app/routes/map.tsx | 28 +++++++++++--------- src/frontend/app/routes/stops-$id.tsx | 49 ++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 24 deletions(-) (limited to 'src/frontend/app/routes') diff --git a/src/frontend/app/routes/map.tsx b/src/frontend/app/routes/map.tsx index 461e891..402bf60 100644 --- a/src/frontend/app/routes/map.tsx +++ b/src/frontend/app/routes/map.tsx @@ -35,7 +35,7 @@ export default function StopMap() { const [stops, setStops] = useState< GeoJsonFeature< Point, - { stopId: number; name: string; lines: string[]; cancelled?: boolean } + { stopId: string; name: string; lines: string[]; cancelled?: boolean, prefix: string } >[] >([]); const [selectedStop, setSelectedStop] = useState(null); @@ -65,7 +65,7 @@ export default function StopMap() { StopDataProvider.getStops().then((data) => { const features: GeoJsonFeature< Point, - { stopId: number; name: string; lines: string[]; cancelled?: boolean } + { stopId: string; name: string; lines: string[]; cancelled?: boolean, prefix: string } >[] = data.map((s) => ({ type: "Feature", geometry: { @@ -77,6 +77,7 @@ export default function StopMap() { name: s.name.original, lines: s.lines, cancelled: s.cancelled ?? false, + prefix: s.stopId.startsWith("renfe:") ? "stop-renfe" : (s.cancelled ? "stop-vitrasa-cancelled" : "stop-vitrasa"), }, })); setStops(features); @@ -152,7 +153,7 @@ export default function StopMap() { return; } - const stopId = parseInt(props.stopId, 10); + const stopId = props.stopId; // fetch full stop to get lines array StopDataProvider.getStopById(stopId) @@ -200,25 +201,23 @@ export default function StopMap() { (undefined); const [stopData, setStopData] = useState(undefined); @@ -98,8 +123,8 @@ export default function Estimates() { if (customName) return customName; if (stopData?.name.intersect) return stopData.name.intersect; if (stopData?.name.original) return stopData.name.original; - return `Parada ${stopIdNum}`; - }, [customName, stopData, stopIdNum]); + return `Parada ${stopId}`; + }, [customName, stopData, stopId]); usePageTitle(getStopDisplayName()); @@ -128,21 +153,21 @@ export default function Estimates() { try { setDataError(null); - const body = await loadConsolidatedData(params.id!); + const body = await loadConsolidatedData(stopId); setData(body); setDataDate(new Date()); // Load stop data from StopDataProvider - const stop = await StopDataProvider.getStopById(stopIdNum); + const stop = await StopDataProvider.getStopById(stopId); setStopData(stop); - setCustomName(StopDataProvider.getCustomName(stopIdNum)); + setCustomName(StopDataProvider.getCustomName(stopId)); } catch (error) { console.error("Error loading consolidated data:", error); setDataError(parseError(error)); setData(null); setDataDate(null); } - }, [params.id, stopIdNum]); + }, [stopId]); const refreshData = useCallback(async () => { await Promise.all([loadData()]); @@ -170,19 +195,19 @@ export default function Estimates() { setDataLoading(true); loadData(); - StopDataProvider.pushRecent(parseInt(params.id ?? "")); + StopDataProvider.pushRecent(stopId); setFavourited( - StopDataProvider.isFavourite(parseInt(params.id ?? "")) + StopDataProvider.isFavourite(stopId) ); setDataLoading(false); - }, [params.id, loadData]); + }, [stopId, loadData]); const toggleFavourite = () => { if (favourited) { - StopDataProvider.removeFavourite(stopIdNum); + StopDataProvider.removeFavourite(stopId); setFavourited(false); } else { - StopDataProvider.addFavourite(stopIdNum); + StopDataProvider.addFavourite(stopId); setFavourited(true); } }; -- cgit v1.3