aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/routes/stops-$id.tsx
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-12-07 23:33:10 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-12-07 23:37:38 +0100
commita1d589c1a0d5a5010e5fe4e8a1ec403ffafb289f (patch)
tree870366d9ce178530b836086e432331f78ec4a07e /src/frontend/app/routes/stops-$id.tsx
parent5fa8d1ffeb4a3a0c5c6846de3986ec779a4fe564 (diff)
Implement Renfe data source
Diffstat (limited to 'src/frontend/app/routes/stops-$id.tsx')
-rw-r--r--src/frontend/app/routes/stops-$id.tsx49
1 files changed, 37 insertions, 12 deletions
diff --git a/src/frontend/app/routes/stops-$id.tsx b/src/frontend/app/routes/stops-$id.tsx
index 31cc75f..d836c12 100644
--- a/src/frontend/app/routes/stops-$id.tsx
+++ b/src/frontend/app/routes/stops-$id.tsx
@@ -72,10 +72,35 @@ const loadConsolidatedData = async (
return await resp.json();
};
+export interface ConsolidatedCirculation {
+ line: string;
+ route: string;
+ schedule?: {
+ running: boolean;
+ minutes: number;
+ serviceId: string;
+ tripId: string;
+ shapeId?: string;
+ };
+ realTime?: {
+ minutes: number;
+ distance: number;
+ };
+ currentPosition?: {
+ latitude: number;
+ longitude: number;
+ orientationDegrees: number;
+ shapeIndex?: number;
+ };
+ isPreviousTrip?: boolean;
+ previousTripShapeId?: string;
+ nextStreets?: string[];
+}
+
export default function Estimates() {
const { t } = useTranslation();
const params = useParams();
- const stopIdNum = parseInt(params.id ?? "");
+ const stopId = params.id ?? "";
const [customName, setCustomName] = useState<string | undefined>(undefined);
const [stopData, setStopData] = useState<Stop | undefined>(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);
}
};