[frontend]: Add non-data source conditional filters
This commit is contained in:
@ -8,11 +8,11 @@ const TRANSIENT_DATA_API = "https://281bc6mcm5.execute-api.us-east-1.amazonaws.c
|
||||
const PERMANENT_DATA_API = "https://a6y312dpuj.execute-api.us-east-1.amazonaws.com/permanent_data";
|
||||
|
||||
const dataSources = [
|
||||
{ id: "IrishRailTrains", name: "Irish Rail Trains", url: `${TRANSIENT_DATA_API}?objectType=IrishRailTrain` },
|
||||
{ id: "IrishRailStations", name: "Irish Rail Stations", url: `${PERMANENT_DATA_API}?objectType=IrishRailStation` },
|
||||
{ id: "LuasStops", name: "Luas Stops", url: `${PERMANENT_DATA_API}?objectType=LuasStop` },
|
||||
{ id: "BusStops", name: "Bus Stops", url: `${PERMANENT_DATA_API}?objectType=BusStop` },
|
||||
{ id: "Buses", name: "Buses", url: `${TRANSIENT_DATA_API}?objectType=Bus` },
|
||||
{ id: "irish-rail-trains", name: "Irish Rail Trains", url: `${TRANSIENT_DATA_API}?objectType=IrishRailTrain` },
|
||||
{ id: "irish-rail-stations", name: "Irish Rail Stations", url: `${PERMANENT_DATA_API}?objectType=IrishRailStation` },
|
||||
{ id: "luas-stops", name: "Luas Stops", url: `${PERMANENT_DATA_API}?objectType=LuasStop` },
|
||||
{ id: "bus-stops", name: "Bus Stops", url: `${PERMANENT_DATA_API}?objectType=BusStop` },
|
||||
{ id: "buses", name: "Buses", url: `${TRANSIENT_DATA_API}?objectType=Bus` },
|
||||
];
|
||||
|
||||
function App() {
|
||||
@ -36,19 +36,37 @@ function App() {
|
||||
};
|
||||
}, [searchInput]);
|
||||
|
||||
const fetchData = async () => {
|
||||
const fetchData = async (enabledSources) => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const newMarkers = (await Promise.all(
|
||||
dataSources
|
||||
.filter(({ id }) => selectedSources.includes(id))
|
||||
.filter(({ id }) => enabledSources.includes(id))
|
||||
.map(({ url }) => fetch(url).then((res) => res.json()))
|
||||
))
|
||||
.flat()
|
||||
.map((item) => {
|
||||
const showMainline = enabledSources.includes("mainline");
|
||||
const showSuburban = enabledSources.includes("suburban");
|
||||
const showDart = enabledSources.includes("dart");
|
||||
const showRunning = enabledSources.includes("running");
|
||||
const showNotYetRunning = enabledSources.includes("not-yet-running");
|
||||
const showTerminated = enabledSources.includes("terminated");
|
||||
const showEarly = enabledSources.includes("early");
|
||||
const showOnTime = enabledSources.includes("on-time");
|
||||
const showLate = enabledSources.includes("late");
|
||||
|
||||
const showRedLine = enabledSources.includes("red-line");
|
||||
const showGreenLine = enabledSources.includes("green-line");
|
||||
const showParkAndRide = enabledSources.includes("park-and-ride");
|
||||
const showCycleAndRide = enabledSources.includes("cycle-and-ride");
|
||||
const showEnabled = enabledSources.includes("enabled");
|
||||
const showDisabled = enabledSources.includes("disabled");
|
||||
|
||||
let icon = item.objectType;
|
||||
let popupContent;
|
||||
let objectTitle;
|
||||
let display = false;
|
||||
let markerText = "";
|
||||
|
||||
switch (item.objectType) {
|
||||
@ -77,21 +95,57 @@ function App() {
|
||||
case "R":
|
||||
trainStatus = "Running";
|
||||
break;
|
||||
|
||||
case "T":
|
||||
trainStatus = "Terminated";
|
||||
break;
|
||||
|
||||
case "N":
|
||||
trainStatus = "Not yet running";
|
||||
break;
|
||||
|
||||
default:
|
||||
trainStatus = "Not running";
|
||||
trainStatus = "Unknown";
|
||||
}
|
||||
|
||||
const splitMessage = item.trainPublicMessage.split("\\n");
|
||||
const match = splitMessage[1].match(/\((.*?)\)/);
|
||||
const punctuality = match ? match[1] : "N/A";
|
||||
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";
|
||||
}
|
||||
|
||||
// set icon depending on lateness of train and type
|
||||
if (trainStatus === "Not running") {
|
||||
icon += "NotRunning";
|
||||
} else if (punctuality.charAt(0) === "-" || punctuality.charAt(0) === "0") {
|
||||
if (punctualityStr === "early") {
|
||||
latenessMessage = -punctuality + " minute" + (punctuality === 1 ? "" : "s") + " early";
|
||||
icon += "OnTime";
|
||||
} else {
|
||||
icon += "Late";
|
||||
}
|
||||
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 = (
|
||||
@ -103,12 +157,19 @@ function App() {
|
||||
<li><b>Status:</b> {trainStatus}</li>
|
||||
<li><b>Direction:</b> {item.trainDirection}</li>
|
||||
<li><b>Update:</b> {splitMessage[2]}</li>
|
||||
<li><b>Punctuality:</b> {punctuality}</li>
|
||||
<li><b>Punctuality:</b> {latenessMessage}</li>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
|
||||
markerText = item.trainPublicMessage + " " + item.trainDirection;
|
||||
display =
|
||||
((item.latitude !== "0" && item.longitude !== "0") && // filter out trains with no location data
|
||||
((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)));
|
||||
|
||||
break;
|
||||
|
||||
case "IrishRailStation":
|
||||
@ -123,7 +184,10 @@ function App() {
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
|
||||
markerText = item.trainStationCode + " " + item.trainStationDesc;
|
||||
display = (item.latitude !== "0" && item.longitude !== "0");
|
||||
|
||||
break;
|
||||
|
||||
case "Bus":
|
||||
@ -140,7 +204,10 @@ function App() {
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
|
||||
markerText = item.busRouteAgencyName + " " + item.busRouteShortName + " " + item.busRouteLongName;
|
||||
display = (item.latitude !== "0" && item.longitude !== "0");
|
||||
|
||||
break;
|
||||
|
||||
case "BusStop":
|
||||
@ -155,7 +222,10 @@ function App() {
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
|
||||
markerText = item.busStopName;
|
||||
display = (item.latitude !== "0" && item.longitude !== "0");
|
||||
|
||||
break;
|
||||
|
||||
case "LuasStop":
|
||||
@ -165,9 +235,11 @@ function App() {
|
||||
switch (item.luasStopLineID) {
|
||||
case "1":
|
||||
luasLine = "Green Line";
|
||||
icon += "Green";
|
||||
break;
|
||||
case "2":
|
||||
luasLine = "Red Line";
|
||||
icon += "Red";
|
||||
break;
|
||||
default:
|
||||
luasLine = "N/A";
|
||||
@ -175,7 +247,16 @@ function App() {
|
||||
popupContent = (
|
||||
<LuasPopup item={item} objectTitle={objectTitle} luasLine={luasLine} />
|
||||
);
|
||||
markerText = item.luasStopIrishName + " " + item.luasStopName;
|
||||
|
||||
markerText = item.luasStopIrishName + " " + item.luasStopName + " " + luasLine;
|
||||
display = (
|
||||
(item.latitude !== "0" && item.longitude !== "0") &&
|
||||
(showGreenLine && luasLine === "Green Line" || showRedLine && luasLine === "Red Line") &&
|
||||
(showEnabled && item.luasStopIsEnabled === "1" || showDisabled && item.luasStopIsEnabled === "0") &&
|
||||
(!showCycleAndRide || (showCycleAndRide && item.luasStopIsCycleAndRide === "1")) &&
|
||||
(!showParkAndRide || (showParkAndRide && item.luasStopIsParkAndRide === "1"))
|
||||
);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -192,8 +273,10 @@ function App() {
|
||||
popup: popupContent,
|
||||
icon: icon,
|
||||
markerText: markerText.toLowerCase(),
|
||||
display: display
|
||||
};
|
||||
});
|
||||
})
|
||||
.filter((marker) => marker.display);
|
||||
|
||||
setMarkers(newMarkers);
|
||||
} catch (error) {
|
||||
|
Reference in New Issue
Block a user