"use client"; import { useState, useMemo } from "react"; import useSWR from "swr"; import Sidebar from "@/components/Sidebar"; import Map from "@components/Map"; import LogObservatoryModal from "@/components/LogObservatoryModal"; // Adjust if your path is different import { fetcher } from "@utils/axiosHelpers"; import { Observatory } from "@prismaclient"; import { getRelativeDate } from "@utils/formatters"; import GeologicalEvent from "@appTypes/Event"; import { useStoreState } from "@hooks/store"; function NoAccessModal({ open, onClose }) { if (!open) return null; return (

No Access

Sorry, You do not have access rights, please log in or contact an Admin.

); } export default function Observatories() { const [selectedEventId, setSelectedEventId] = useState(""); const [hoveredEventId, setHoveredEventId] = useState(""); const [logModalOpen, setLogModalOpen] = useState(false); const [noAccessModalOpen, setNoAccessModalOpen] = useState(false); const user = useStoreState((state) => state.user); const role: "GUEST" | "SCIENTIST" | "ADMIN" = user?.role ?? "GUEST"; const canLogObservatory = role === "SCIENTIST" || role === "ADMIN"; const { data, error, isLoading, mutate } = useSWR( "/api/observatories", fetcher ); const observatoryEvents = useMemo( () => data && data.observatories ? data.observatories .map((x: Observatory): GeologicalEvent & { isFunctional: boolean } => ({ id: x.id.toString(), title: ` ${x.name}`, longitude: x.longitude, latitude: x.latitude, isFunctional: x.isFunctional, // <-- include this! text1: "", text2: getRelativeDate(x.dateEstablished), date: x.dateEstablished, })) .sort( (a: GeologicalEvent, b: GeologicalEvent) => new Date(b.date).getTime() - new Date(a.date).getTime() ) : [], [data] ); const handleLogClick = () => { if (canLogObservatory) { setLogModalOpen(true); } else { setNoAccessModalOpen(true); } }; return (
setLogModalOpen(false)} onSuccess={() => mutate()} /> setNoAccessModalOpen(false)} />
); }