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 (