"use client"; import { useMemo, useState } from "react"; import useSWR from "swr"; import Map from "@components/Map"; import Sidebar from "@components/Sidebar"; import { createPoster } from "@utils/axiosHelpers"; import { Earthquake } from "@prismaclient"; import { getRelativeDate } from "@utils/formatters"; import GeologicalEvent from "@appTypes/GeologicalEvent"; import EarthquakeSearchModal from "@components/EarthquakeSearchModal"; import EarthquakeLogModal from "@components/EarthquakeLogModal"; // If you use a separate log modal import { useStoreState } from "@hooks/store"; // Optional: "No Access Modal" - as in your original function NoAccessModal({ open, onClose }) { if (!open) return null; return (

Access Denied

Sorry, you do not have access rights to Log an Earthquake. Please Log in here, or contact an Admin if you believe this is a mistake

); } export default function Earthquakes() { const [selectedEventId, setSelectedEventId] = useState(""); const [hoveredEventId, setHoveredEventId] = useState(""); const [searchModalOpen, setSearchModalOpen] = useState(false); const [logModalOpen, setLogModalOpen] = useState(false); const [noAccessModalOpen, setNoAccessModalOpen] = useState(false); // Your user/role logic const user = useStoreState((state) => state.user); const role: "GUEST" | "SCIENTIST" | "ADMIN" = user?.role ?? "GUEST"; const canLogEarthquake = role === "SCIENTIST" || role === "ADMIN"; // Fetch earthquakes (10 days recent) const { data, error, isLoading, mutate } = useSWR("/api/earthquakes", createPoster({ rangeDaysPrev: 10 })); // Shape for Map/Sidebar const earthquakeEvents = useMemo( () => data && data.earthquakes ? data.earthquakes .map( (x: Earthquake): GeologicalEvent => ({ id: x.code, title: `Earthquake in ${x.location || (x.code && x.code.split("-")[2])}`, magnitude: x.magnitude, longitude: x.longitude, latitude: x.latitude, text1: "", text2: getRelativeDate(x.date), date: x.date, code: x.code, }) ) .sort((a: GeologicalEvent, b: GeologicalEvent) => new Date(b.date).getTime() - new Date(a.date).getTime()) : [], [data] ); // Handler for log const handleLogClick = () => { if (canLogEarthquake) { setLogModalOpen(true); } else { setNoAccessModalOpen(true); } }; return (
setSearchModalOpen(true)} button1Disabled={!canLogEarthquake} /> {/* ---- SEARCH MODAL ---- */} setSearchModalOpen(false)} onSelect={(eq) => setSelectedEventId(eq.code)} /> {/* ---- LOGGING MODAL ---- */} setLogModalOpen(false)} onSuccess={() => mutate()} /> {/* ---- NO ACCESS ---- */} setNoAccessModalOpen(false)} />
); }