From 25dc186a753b621242beaf80554b45b7052d72ec Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 10 Mar 2025 22:00:44 +0000 Subject: [PATCH] [frontend]: Add button to fetch trains due into a station --- frontend/src/App.jsx | 16 ++--- frontend/src/components/LuasPopup.jsx | 4 -- frontend/src/components/TrainStationPopup.jsx | 61 +++++++++++++++++++ 3 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 frontend/src/components/TrainStationPopup.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 900d229..f0c4e2d 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,12 +1,15 @@ import React, { useState, useEffect, useMemo } from "react"; import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; +import Navbar from "./components/Navbar"; +import Statistics from "./components/Statistics.jsx"; + import Sidebar from "./components/Sidebar"; import MapComponent from "./components/MapComponent"; import LoadingOverlay from "./components/LoadingOverlay"; + import LuasPopup from "./components/LuasPopup"; -import Navbar from "./components/Navbar"; -import Statistics from "./components/Statistics.jsx"; +import TrainStationPopup from "./components/TrainStationPopup"; const TRANSIENT_DATA_API = "https://281bc6mcm5.execute-api.us-east-1.amazonaws.com/transient_data"; const PERMANENT_DATA_API = "https://a6y312dpuj.execute-api.us-east-1.amazonaws.com/permanent_data"; @@ -183,14 +186,7 @@ function App() { case "IrishRailStation": objectTitle = item.trainStationDesc + " Train Station"; popupContent = ( -
-

{objectTitle}

- -
+ ); markerText = item.trainStationCode + " " + item.trainStationDesc; diff --git a/frontend/src/components/LuasPopup.jsx b/frontend/src/components/LuasPopup.jsx index a6caf58..cbba62e 100644 --- a/frontend/src/components/LuasPopup.jsx +++ b/frontend/src/components/LuasPopup.jsx @@ -17,10 +17,6 @@ const LuasPopup = ({ item, objectTitle, luasLine }) => { // Ensure 'tram' is an array, if it's not, convert it into an array const trams = Array.isArray(direction.tram) ? direction.tram : [direction.tram]; - // const tramDetails = trams.map(tram => - // `Destination: ${tram["@destination"]}, Arrival: ${tram["@dueMins"]} mins` - // ).join("
"); - let tramDetails = ""; trams.forEach(tram => { if (tram["@dueMins"] === "DUE") { diff --git a/frontend/src/components/TrainStationPopup.jsx b/frontend/src/components/TrainStationPopup.jsx new file mode 100644 index 0000000..d2345f4 --- /dev/null +++ b/frontend/src/components/TrainStationPopup.jsx @@ -0,0 +1,61 @@ +import React, { useState } from "react"; + +const TrainStationPopup = ({ item, objectTitle }) => { + const [trainInfo, setTrainInfo] = useState(""); + + const fetchTrainData = async () => { + try { + 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 + + const trainData = trainDataArray.map(train => ({ + trainCode: train.Traincode, + origin: train.Origin, + destination: train.Destination, + dueIn: train.Duein, + late: train.Late, + status: train.Status, + 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(""); + + setTrainInfo(trainInfoHtml); + } catch (error) { + setTrainInfo("Failed to fetch train data"); + } + }; + + return ( +
+

{objectTitle}

+
    +
  • Train Station Name: {item.trainStationDesc}
  • +
  • Train Station ID: {item.trainStationID}
  • +
  • Train Station Code: {item.trainStationCode}
  • +
+ +
+
+ ); +}; + +export default TrainStationPopup; \ No newline at end of file