"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"; 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); const user = useStoreState((state) => state.user); const canLogEarthquake = user?.role === "SCIENTIST" || user?.role === "ADMIN"; 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); } }; function NoAccessModal({ open, onClose }: { open: typeof noAccessModalOpen; onClose: () => void }) { if (!open) return null; return (
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