From cb5cd8e69243052ae220c7017beadec23aa5cdf3 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Wed, 26 Nov 2025 21:53:01 +0000 Subject: [PATCH] feat: button to close admin banners --- src/components/admin/banner.tsx | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/admin/banner.tsx b/src/components/admin/banner.tsx index cdb75a5..f9905a3 100644 --- a/src/components/admin/banner.tsx +++ b/src/components/admin/banner.tsx @@ -1,7 +1,7 @@ "use client"; import { useSearchParams } from "next/navigation"; -import { Suspense } from "react"; +import { Suspense, useEffect, useState } from "react"; import useSWR from "swr"; import { Icon } from "@iconify/react"; @@ -18,7 +18,7 @@ function RedirectBanner() { if (from !== "old-domain") return null; return ( -
+
We have moved URLs, welcome to tomodachishare.com!
@@ -27,13 +27,34 @@ function RedirectBanner() { export default function AdminBanner() { const { data } = useSWR("/api/admin/banner", fetcher); + const [shouldShow, setShouldShow] = useState(true); + + useEffect(() => { + if (!data?.message) return; + + // Check if the current banner text was closed by the user + const closedBanner = window.localStorage.getItem("closedBanner"); + setShouldShow(data.message !== closedBanner); + }, [data]); + + const handleClose = () => { + if (!data) return; + + // Close banner and remember it + window.localStorage.setItem("closedBanner", data.message); + setShouldShow(false); + }; return ( <> - {data && data.message && ( -
+ {data && data.message && shouldShow && ( +
{data.message} + +
)}