From fe1d15090aa7a135faf41721c7c11f87592fd211 Mon Sep 17 00:00:00 2001 From: DanielS Date: Wed, 24 Jun 2026 13:19:00 +0200 Subject: [PATCH] feat: hide all demo badges when demo mode is disabled --- shop/app/admin/layout.tsx | 9 +++++--- shop/components/DemoWrapper.tsx | 34 +++++++++++++++++++++++++++++++ shop/components/HeaderWrapper.tsx | 15 ++++++++------ shop/components/NavbarClient.tsx | 21 ++++++------------- 4 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 shop/components/DemoWrapper.tsx diff --git a/shop/app/admin/layout.tsx b/shop/app/admin/layout.tsx index b64c7ae..1c00dc9 100644 --- a/shop/app/admin/layout.tsx +++ b/shop/app/admin/layout.tsx @@ -3,6 +3,7 @@ import { LayoutDashboard, Package, Settings, Users, LogOut, LayoutGrid, Shopping import { redirect } from 'next/navigation' import { createClient } from '@/lib/supabase/server' import { AdminLogoutButton } from '@/components/admin/logout-menu-item' +import { DemoWrapper } from '@/components/DemoWrapper' export default async function AdminLayout({ children, @@ -67,9 +68,11 @@ export default async function AdminLayout({
CASPOS Store - - Demo - + + + Demo + +
diff --git a/shop/components/DemoWrapper.tsx b/shop/components/DemoWrapper.tsx new file mode 100644 index 0000000..1f62dd8 --- /dev/null +++ b/shop/components/DemoWrapper.tsx @@ -0,0 +1,34 @@ +"use client"; + +import { useEffect, useState } from "react"; + +interface DemoWrapperProps { + children: React.ReactNode; +} + +export function DemoWrapper({ children }: DemoWrapperProps) { + const [showDemo, setShowDemo] = useState(true); + const [isMounted, setIsMounted] = useState(false); + + useEffect(() => { + setIsMounted(true); + const checkDemo = () => { + const disabled = localStorage.getItem('demo_banner_disabled') === 'true'; + setShowDemo(!disabled); + }; + + checkDemo(); + window.addEventListener('storage_demo_changed', checkDemo); + return () => window.removeEventListener('storage_demo_changed', checkDemo); + }, []); + + if (!isMounted) { + return <>{children}; + } + + if (!showDemo) { + return null; + } + + return <>{children}; +} diff --git a/shop/components/HeaderWrapper.tsx b/shop/components/HeaderWrapper.tsx index b080694..ad9dadc 100644 --- a/shop/components/HeaderWrapper.tsx +++ b/shop/components/HeaderWrapper.tsx @@ -1,6 +1,7 @@ "use client"; import { usePathname } from "next/navigation"; +import { DemoWrapper } from "./DemoWrapper"; interface HeaderWrapperProps { navbar: React.ReactNode; @@ -18,12 +19,14 @@ export function HeaderWrapper({ navbar, children }: HeaderWrapperProps) { return (
{/* Demo Banner */} -
- ⚠️ Dies ist eine **Demo-Webseite (Dummy-Shop)**. Es werden keine echten Bestellungen verarbeitet oder Zahlungen abgewickelt. -
+ +
+ ⚠️ Dies ist eine **Demo-Webseite (Dummy-Shop)**. Es werden keine echten Bestellungen verarbeitet oder Zahlungen abgewickelt. +
+
{navbar} diff --git a/shop/components/NavbarClient.tsx b/shop/components/NavbarClient.tsx index ea8319a..83f052c 100644 --- a/shop/components/NavbarClient.tsx +++ b/shop/components/NavbarClient.tsx @@ -9,6 +9,7 @@ import { Rocket, Menu, X, User as UserIcon, LogOut } from "lucide-react"; import { Button } from "@/components/ui/button"; import { signOut } from "@/lib/actions/auth"; import { resolveSupabaseUrl } from "@/lib/utils"; +import { DemoWrapper } from "./DemoWrapper"; interface NavbarClientProps { user: User | null; @@ -71,18 +72,6 @@ export function NavbarClient({ user, role = "partner" }: NavbarClientProps) { }; }, [supabase]); - useEffect(() => { - const checkBanner = () => { - const disabled = localStorage.getItem('demo_banner_disabled') === 'true'; - const banner = document.getElementById('demo-banner'); - if (banner) banner.style.display = disabled ? 'none' : 'block'; - }; - - checkBanner(); - window.addEventListener('storage_demo_changed', checkBanner); - return () => window.removeEventListener('storage_demo_changed', checkBanner); - }, []); - const handleSignOut = async () => { try { await signOut(); @@ -101,9 +90,11 @@ export function NavbarClient({ user, role = "partner" }: NavbarClientProps) {
CASPOS Store - - Demo - + + + Demo + + {/* Desktop Navigation */}