import React, { useState } from "react"; import { useMap } from "react-leaflet"; const LuasPopup = ({ item, objectTitle, luasLine, toggleFavourite, favourites }) => { const [isFavourite, setIsFavourite] = useState(favourites.LuasStop?.includes(item.luasStopID)); const handleToggleFavourite = () => { toggleFavourite("LuasStop", item.luasStopID); setIsFavourite((prev) => !prev); }; const [luasInfo, setLuasInfo] = useState(""); const map = useMap(); // Access the Leaflet map instance const fetchLuasData = async () => { let luasInfoHtml = ""; try { const response = await fetch( `https://3fzg2hdskc.execute-api.us-east-1.amazonaws.com/return_luas_data?luasStopCode=${item.luasStopCode}` ); const data = await response.json(); if (!data.stopInfo || !data.stopInfo.direction) { throw new Error("No tram data available"); } const tramInfo = data.stopInfo.direction.map(direction => { // Ensure 'tram' is an array, if it's not, convert it into an array const trams = Array.isArray(direction.tram) ? direction.tram : [direction.tram]; let tramDetails = ""; trams.forEach(tram => { if (tram["@dueMins"] === "DUE") { tramDetails += `
Destination: ${tram["@destination"]}; Arrival: DUE NOW.`; } else if (tram["@dueMins"] === "1") { tramDetails += `
Destination: ${tram["@destination"]}; Arrival: 1 minute.`; } else if (tram["@destination"] === "No trams forecast") { tramDetails += "
No trams forecast"; } else { tramDetails += `
Destination: ${tram["@destination"]}; Arrival: ${tram["@dueMins"]} minutes.`; } }); return `${direction["@name"]}: ${tramDetails}`; }).join("

"); luasInfoHtml = tramInfo; } catch (error) { luasInfoHtml = "Failed to fetch Luas data or no trams available."; } setLuasInfo(luasInfoHtml); // Ensure the map pans to keep the popup in view even if an error occurs setTimeout(() => { map.panTo([item.latitude, item.longitude], { animate: true }); }, 300); }; return (

{objectTitle}

); }; export default LuasPopup;