import React, { useState } from "react"; import Sidebar from "./components/Sidebar"; import MapComponent from "./components/MapComponent"; import LoadingOverlay from "./components/LoadingOverlay"; 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"; 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` }, ]; function App() { const [selectedSources, setSelectedSources] = useState([]); const [markers, setMarkers] = useState([]); const [loading, setLoading] = useState(false); const [clusteringEnabled, setClusteringEnabled] = useState(true); const fetchData = async () => { setLoading(true); try { const newMarkers = (await Promise.all( dataSources .filter(({ id }) => selectedSources.includes(id)) .map(({ url }) => fetch(url).then((res) => res.json())) )) .flat() .map((item) => { let icon = item.objectType; let popupContent; let objectTitle; 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"; } let trainStatus; switch (item.trainStatus) { case "R": trainStatus = "Running"; break; default: trainStatus = "Not running" } const splitMessage = item.trainPublicMessage.split("\\n"); const match = splitMessage[1].match(/\((.*?)\)/); const punctuality = match ? match[1] : "N/A"; // set icon depending on lateness of train and type of train if (trainStatus == "Not running") { icon += "NotRunning"; } else if (punctuality.charAt(0) === "-" || punctuality.charAt(0) === "0") { icon += "OnTime"; } else { icon += "Late" } popupContent = (

{objectTitle}

); break; case "IrishRailStation": objectTitle = item.trainStationDesc + " Train Station"; popupContent = (

{objectTitle}

); break; case "Bus": objectTitle = item.busRouteAgencyName + ": " + item.busRouteShortName; popupContent = (

{objectTitle}

); break; case "BusStop": objectTitle = item.busStopName + " Bus Stop"; popupContent = (

{objectTitle}

); break; default: popupContent = (

{item.objectType}

); } return { coords: [item.latitude, item.longitude], popup: popupContent, icon: icon, }; }); setMarkers(newMarkers); } catch (error) { console.error("Error fetching data:", error); } setLoading(false); }; return (
{loading && }
); } export default App;