From 49d38bcbd15b6a97bdee403d903a26decace469c Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 24 Mar 2025 18:23:12 +0000 Subject: [PATCH] [frontend]: Get train data directly from API --- frontend/src/App.jsx | 88 ++----------------- .../src/components/IrishRailTrainPopup.jsx | 12 +-- frontend/src/components/MapComponent.jsx | 21 +++-- 3 files changed, 25 insertions(+), 96 deletions(-) diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index a35e043..ff696b9 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -176,90 +176,16 @@ function App() { switch (item.objectType) { case "IrishRailTrain": objectTitle = "Irish Rail Train: " + item.trainCode; - let trainType; - switch (item.trainType) { - case "M": - trainType = "Mainline"; - icon = "mainline"; - break; - case "S": - trainType = "Suburban"; - icon = "suburban"; - break; - case "D": - trainType = "DART"; - icon = "dart"; - break; - default: - trainType = "Unknown"; - } + icon = item.trainTypeFull + item.trainPunctualityStatus; - let trainStatus; - switch (item.trainStatus) { - case "R": - trainStatus = "Running"; - break; - - case "T": - trainStatus = "Terminated"; - break; - - case "N": - trainStatus = "Not yet running"; - break; - - default: - trainStatus = "Unknown"; - } - - const splitMessage = item.trainPublicMessage.split("\\n"); - const match = splitMessage[1].match(/(-?\d+)\s+mins\s+late/); - const punctuality = match ? parseInt(match[1], 10) : NaN; - let latenessMessage; - let punctualityStr; - - if (punctuality < 0) { - punctualityStr = "early"; - } else if (punctuality === 0) { - punctualityStr = "On time"; - } else if (punctuality > 0) { - punctualityStr = "late"; - } else { - punctualityStr = "N/A"; - } - - if (punctualityStr === "early") { - latenessMessage = -punctuality + " minute" + (punctuality === -1 ? "" : "s") + " early"; - icon += "OnTime"; - } - else if (punctualityStr === "On time") { - latenessMessage = punctualityStr; - icon += "OnTime"; - } - else if (punctualityStr === "late") { - latenessMessage = punctuality + " minute" + (punctuality === 1 ? "" : "s") + " late"; - - if (trainStatus === "Running") { - icon += "Late"; - } - else { - icon += "NotRunning"; - } - } - else { - latenessMessage = "On time"; - icon += "NotRunning"; + if (item.trainStatusFull == "Terminated" || item.trainStatusFull == "Not yet running") { + icon = item.trainTypeFull + "NotRunning"; } popupContent = ( @@ -268,10 +194,10 @@ function App() { markerText = item.trainPublicMessage + " " + item.trainDirection; display = ((item.latitude !== "0" && item.longitude !== "0") && - ((showMainline && trainType == "Mainline") || (showSuburban && trainType == "Suburban") || (showDart && trainType == "DART")) && - ((showRunning && trainStatus == "Running") || (showNotYetRunning && trainStatus == "Not yet running") || (showTerminated && trainStatus == "Terminated")) && - ((trainStatus == "Running" && showEarly && punctualityStr == "early") || (trainStatus == "Running" && showOnTime && punctualityStr == "On time") || (trainStatus == "Running" && showLate && punctualityStr == "late") - || (trainStatus == "Not yet running" && showNotYetRunning) || (trainStatus == "Terminated" && showTerminated))) && + ((showMainline && item.trainTypeFull == "Mainline") || (showSuburban && item.trainTypeFull == "Suburban") || (showDart && item.trainTypeFull == "DART")) && + ((showRunning && item.trainStatusFull == "Running") || (showNotYetRunning && item.trainStatusFull == "Not yet running") || (showTerminated && item.trainStatusFull == "Terminated")) && + ((item.trainStatusFull == "Running" && showEarly && item.trainPunctualityStatus == "early") || (item.trainStatusFull == "Running" && showOnTime && item.trainPunctualityStatus == "On time") || (item.trainStatusFull == "Running" && showLate && item.trainPunctualityStatus == "late") + || (item.trainStatusFull == "Not yet running" && showNotYetRunning) || (item.trainStatusFull == "Terminated" && showTerminated))) && (numberInputValue && userLocationAvailable ? haversineDistance(userLocation, [item.latitude, item.longitude]) < numberInputValue : true) && (showFaovouritesOnly ? favourites.IrishRailTrain.includes(item.trainCode) : true); diff --git a/frontend/src/components/IrishRailTrainPopup.jsx b/frontend/src/components/IrishRailTrainPopup.jsx index 0552f87..46e05c7 100644 --- a/frontend/src/components/IrishRailTrainPopup.jsx +++ b/frontend/src/components/IrishRailTrainPopup.jsx @@ -1,7 +1,7 @@ import React, { useState } from "react"; import { useMap } from "react-leaflet"; -const IrishRailTrainPopup = ({ item, objectTitle, trainStatus, trainType, latenessMessage, splitMessage, toggleFavourite, favourites }) => { +const IrishRailTrainPopup = ({ item, objectTitle, toggleFavourite, favourites }) => { const [isFavourite, setIsFavourite] = useState(favourites.IrishRailTrain?.includes(item.trainCode)); const handleToggleFavourite = () => { @@ -23,12 +23,12 @@ const IrishRailTrainPopup = ({ item, objectTitle, trainStatus, trainType, latene diff --git a/frontend/src/components/MapComponent.jsx b/frontend/src/components/MapComponent.jsx index bcd8794..9d9fb16 100644 --- a/frontend/src/components/MapComponent.jsx +++ b/frontend/src/components/MapComponent.jsx @@ -37,17 +37,20 @@ const icons = new Map([ ["IrishRailStation", new Icon({ iconUrl: trainStationIconURL, iconSize: [24, 24] })], ["IrishRailTrain", new Icon({ iconUrl: trainIconURL, iconSize: [38, 38] })], - ["mainlineNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })], - ["mainlineOnTime", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], - ["mainlineLate", new Icon({ iconUrl: trainLateIconURL, iconSize: [38, 38] })], + ["MainlineNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })], + ["Mainlineon-time", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], + ["Mainlineearly", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], + ["Mainlinelate", new Icon({ iconUrl: trainLateIconURL, iconSize: [38, 38] })], - ["suburbanNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })], - ["suburbanOnTime", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], - ["suburbanLate", new Icon({ iconUrl: trainLateIconURL, iconSize: [38, 38] })], + ["SuburbanNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })], + ["Suburbanon-time", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], + ["Suburbanearly", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], + ["Suburbanlate", new Icon({ iconUrl: trainLateIconURL, iconSize: [38, 38] })], - ["dartNotRunning", new Icon({ iconUrl: dartNotRunningIconURL, iconSize: [38, 38] })], - ["dartOnTime", new Icon({ iconUrl: dartOnTimeIconURL, iconSize: [38, 38] })], - ["dartLate", new Icon({ iconUrl: dartLateIconURL, iconSize: [38, 38] })], + ["DARTNotRunning", new Icon({ iconUrl: dartNotRunningIconURL, iconSize: [38, 38] })], + ["DARTon-time", new Icon({ iconUrl: dartOnTimeIconURL, iconSize: [38, 38] })], + ["DARTearly", new Icon({ iconUrl: dartOnTimeIconURL, iconSize: [38, 38] })], + ["DARTlate", new Icon({ iconUrl: dartLateIconURL, iconSize: [38, 38] })], ["LuasStop", new Icon({ iconUrl: luasIconURL, iconSize: [38, 38] })], ["LuasStopGreen", new Icon({ iconUrl: luasIconGreenURL, iconSize: [38, 38] })],