From 8756b71878ef73197c571c8a15e01aa6948cfdb3 Mon Sep 17 00:00:00 2001 From: IZZY Date: Sat, 31 May 2025 21:38:48 +0100 Subject: [PATCH] logging for observatories big slay --- src/app/observatories/page.tsx | 42 +++++++++++++++++++++++++++++++++- src/components/Sidebar.tsx | 1 - 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/app/observatories/page.tsx b/src/app/observatories/page.tsx index d1a919e..6a1ac17 100644 --- a/src/app/observatories/page.tsx +++ b/src/app/observatories/page.tsx @@ -8,11 +8,38 @@ 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", @@ -41,6 +68,14 @@ export default function Observatories() { [data] ); + const handleLogClick = () => { + if (canLogObservatory) { + setLogModalOpen(true); + } else { + setNoAccessModalOpen(true); + } + }; + return (
@@ -64,13 +99,18 @@ export default function Observatories() { setHoveredEventId={setHoveredEventId} button1Name="Log a New Observatory" button2Name="Search Observatories" - onButton1Click={() => setLogModalOpen(true)} + onButton1Click={handleLogClick} + button1Disabled={!canLogObservatory} /> setLogModalOpen(false)} onSuccess={() => mutate()} /> + setNoAccessModalOpen(false)} + />
); } diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index e9c56fd..27f5c22 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -2,7 +2,6 @@ import React, { Dispatch, SetStateAction, useEffect, useRef } from "react"; import { TbHexagon } from "react-icons/tb"; import GeologicalEvent from "@appTypes/Event"; import getMagnitudeColor from "@utils/getMagnitudeColour"; - interface SidebarProps { logTitle: string; logSubtitle: string;