diff --git a/frontend/src/components/TrainStationPopup.jsx b/frontend/src/components/TrainStationPopup.jsx
index 2e036c9..67e11dc 100644
--- a/frontend/src/components/TrainStationPopup.jsx
+++ b/frontend/src/components/TrainStationPopup.jsx
@@ -1,20 +1,29 @@
-import React, { useState } from "react";
+import React, { useState, useRef } from "react";
+import { useMap } from "react-leaflet";
const TrainStationPopup = ({ item, objectTitle }) => {
const [trainInfo, setTrainInfo] = useState("");
+ const map = useMap(); // Access the Leaflet map instance
const fetchTrainData = async () => {
+ let trainInfoHtml = "";
+
try {
- const response = await fetch(`https://kkz92ft0ad.execute-api.us-east-1.amazonaws.com/return_station_data?stationCode=${item.trainStationCode}`);
+ const response = await fetch(
+ `https://kkz92ft0ad.execute-api.us-east-1.amazonaws.com/return_station_data?stationCode=${item.trainStationCode}`
+ );
const data = await response.json();
- // Ensure objStationData is always an array
let trainDataArray = Array.isArray(data.ArrayOfObjStationData.objStationData)
? data.ArrayOfObjStationData.objStationData
: [data.ArrayOfObjStationData.objStationData];
trainDataArray = trainDataArray.slice(0, 3); // Only show the first 3 trains
+ if (trainDataArray.length === 0) {
+ throw new Error("No train data available");
+ }
+
const trainData = trainDataArray.map(train => ({
trainCode: train.Traincode,
origin: train.Origin,
@@ -25,21 +34,30 @@ const TrainStationPopup = ({ item, objectTitle }) => {
lastLocation: train.Lastlocation,
}));
- const trainInfoHtml = "Trains due in next 90 minutes:
"
- + trainData.map(train => `
- Train Code: ${train.trainCode}
- Origin: ${train.origin}
- Destination: ${train.destination}
- Due In: ${train.dueIn} minutes
- Punctuality: ${train.late > 0 ? `${train.late} minute${train.late === 1 ? "" : "s"} late` : train.late < 0 ? `${Math.abs(train.late)} minute${Math.abs(train.late) === 1 ? "" : "s"} early` : "On time"}
- Status: ${train.status}
- Last Location: ${train.lastLocation || "N/A"}
- `).join("");
+ trainInfoHtml =
+ "Trains due in next 90 minutes:
" +
+ trainData
+ .map(train => `
+ Train Code: ${train.trainCode}
+ Origin: ${train.origin}
+ Destination: ${train.destination}
+ Due In: ${train.dueIn} minutes
+ Punctuality: ${train.late > 0 ? `${train.late} minute${train.late === 1 ? "" : "s"} late` : train.late < 0 ? `${Math.abs(train.late)} minute${Math.abs(train.late) === 1 ? "" : "s"} early` : "On time"}
+ Status: ${train.status}
+ Last Location: ${train.lastLocation || "N/A"}
+ `)
+ .join("");
- setTrainInfo(trainInfoHtml);
} catch (error) {
- setTrainInfo("No trains due in the next 90 minutes");
+ trainInfoHtml = "No trains due in the next 90 minutes.";
}
+
+ setTrainInfo(trainInfoHtml);
+
+ // Ensure the map pans to keep the popup in view even if an error occurs
+ setTimeout(() => {
+ map.panTo([item.latitude, item.longitude], { animate: true });
+ }, 300);
};
return (
@@ -50,12 +68,30 @@ const TrainStationPopup = ({ item, objectTitle }) => {