[frontend]: Get train data directly from API

This commit is contained in:
2025-03-24 18:23:12 +00:00
parent c6282aca14
commit 49d38bcbd1
3 changed files with 25 additions and 96 deletions

View File

@ -176,90 +176,16 @@ function App() {
switch (item.objectType) { switch (item.objectType) {
case "IrishRailTrain": case "IrishRailTrain":
objectTitle = "Irish Rail Train: " + item.trainCode; objectTitle = "Irish Rail Train: " + item.trainCode;
let trainType; icon = item.trainTypeFull + item.trainPunctualityStatus;
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";
}
let trainStatus; if (item.trainStatusFull == "Terminated" || item.trainStatusFull == "Not yet running") {
switch (item.trainStatus) { icon = item.trainTypeFull + "NotRunning";
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";
} }
popupContent = ( popupContent = (
<IrishRailTrainPopup <IrishRailTrainPopup
item={item} item={item}
objectTitle={objectTitle} objectTitle={objectTitle}
splitMessage={splitMessage}
trainType={trainType}
trainStatus={trainStatus}
latenessMessage={latenessMessage}
toggleFavourite={toggleFavourite} toggleFavourite={toggleFavourite}
favourites={favourites} favourites={favourites}
/> />
@ -268,10 +194,10 @@ function App() {
markerText = item.trainPublicMessage + " " + item.trainDirection; markerText = item.trainPublicMessage + " " + item.trainDirection;
display = display =
((item.latitude !== "0" && item.longitude !== "0") && ((item.latitude !== "0" && item.longitude !== "0") &&
((showMainline && trainType == "Mainline") || (showSuburban && trainType == "Suburban") || (showDart && trainType == "DART")) && ((showMainline && item.trainTypeFull == "Mainline") || (showSuburban && item.trainTypeFull == "Suburban") || (showDart && item.trainTypeFull == "DART")) &&
((showRunning && trainStatus == "Running") || (showNotYetRunning && trainStatus == "Not yet running") || (showTerminated && trainStatus == "Terminated")) && ((showRunning && item.trainStatusFull == "Running") || (showNotYetRunning && item.trainStatusFull == "Not yet running") || (showTerminated && item.trainStatusFull == "Terminated")) &&
((trainStatus == "Running" && showEarly && punctualityStr == "early") || (trainStatus == "Running" && showOnTime && punctualityStr == "On time") || (trainStatus == "Running" && showLate && punctualityStr == "late") ((item.trainStatusFull == "Running" && showEarly && item.trainPunctualityStatus == "early") || (item.trainStatusFull == "Running" && showOnTime && item.trainPunctualityStatus == "On time") || (item.trainStatusFull == "Running" && showLate && item.trainPunctualityStatus == "late")
|| (trainStatus == "Not yet running" && showNotYetRunning) || (trainStatus == "Terminated" && showTerminated))) && || (item.trainStatusFull == "Not yet running" && showNotYetRunning) || (item.trainStatusFull == "Terminated" && showTerminated))) &&
(numberInputValue && userLocationAvailable ? haversineDistance(userLocation, [item.latitude, item.longitude]) < numberInputValue : true) && (numberInputValue && userLocationAvailable ? haversineDistance(userLocation, [item.latitude, item.longitude]) < numberInputValue : true) &&
(showFaovouritesOnly ? favourites.IrishRailTrain.includes(item.trainCode) : true); (showFaovouritesOnly ? favourites.IrishRailTrain.includes(item.trainCode) : true);

View File

@ -1,7 +1,7 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useMap } from "react-leaflet"; 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 [isFavourite, setIsFavourite] = useState(favourites.IrishRailTrain?.includes(item.trainCode));
const handleToggleFavourite = () => { const handleToggleFavourite = () => {
@ -23,12 +23,12 @@ const IrishRailTrainPopup = ({ item, objectTitle, trainStatus, trainType, latene
</button> </button>
</div> </div>
<ul> <ul>
<li><b>Train Details:</b> {splitMessage[1].split("(")[0]}</li> <li><b>Train Details:</b> {item.trainDetails}</li>
<li><b>Train Type:</b> {trainType}</li> <li><b>Train Type:</b> {item.trainTypeFull}</li>
<li><b>Status:</b> {trainStatus}</li> <li><b>Status:</b> {item.trainStatusFull}</li>
<li><b>Direction:</b> {item.trainDirection}</li> <li><b>Direction:</b> {item.trainDirection}</li>
<li><b>Update:</b> {splitMessage[2]}</li> <li><b>Update:</b> {item.trainUpdate}</li>
<li><b>Punctuality:</b> {latenessMessage}</li> <li><b>Punctuality:</b> {item.latenessMessage}</li>
</ul> </ul>
</div> </div>

View File

@ -37,17 +37,20 @@ const icons = new Map([
["IrishRailStation", new Icon({ iconUrl: trainStationIconURL, iconSize: [24, 24] })], ["IrishRailStation", new Icon({ iconUrl: trainStationIconURL, iconSize: [24, 24] })],
["IrishRailTrain", new Icon({ iconUrl: trainIconURL, iconSize: [38, 38] })], ["IrishRailTrain", new Icon({ iconUrl: trainIconURL, iconSize: [38, 38] })],
["mainlineNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })], ["MainlineNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })],
["mainlineOnTime", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], ["Mainlineon-time", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })],
["mainlineLate", new Icon({ iconUrl: trainLateIconURL, 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] })], ["SuburbanNotRunning", new Icon({ iconUrl: trainNotRunningIconURL, iconSize: [38, 38] })],
["suburbanOnTime", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })], ["Suburbanon-time", new Icon({ iconUrl: trainOnTimeIconURL, iconSize: [38, 38] })],
["suburbanLate", new Icon({ iconUrl: trainLateIconURL, 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] })], ["DARTNotRunning", new Icon({ iconUrl: dartNotRunningIconURL, iconSize: [38, 38] })],
["dartOnTime", new Icon({ iconUrl: dartOnTimeIconURL, iconSize: [38, 38] })], ["DARTon-time", new Icon({ iconUrl: dartOnTimeIconURL, iconSize: [38, 38] })],
["dartLate", new Icon({ iconUrl: dartLateIconURL, 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] })], ["LuasStop", new Icon({ iconUrl: luasIconURL, iconSize: [38, 38] })],
["LuasStopGreen", new Icon({ iconUrl: luasIconGreenURL, iconSize: [38, 38] })], ["LuasStopGreen", new Icon({ iconUrl: luasIconGreenURL, iconSize: [38, 38] })],