"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { createBrowserClient } from "@supabase/ssr"; import { type User } from "@supabase/supabase-js"; import { Rocket, Menu, X, User as UserIcon, LogOut } from "lucide-react"; import { Button } from "@/components/ui/button"; interface NavbarClientProps { user: User | null; } export function NavbarClient({ user }: NavbarClientProps) { const router = useRouter(); const [currentUser, setCurrentUser] = useState(user); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [open, setOpen] = useState(false); // Supabase URL & Anon Key auslesen (für Browser-Client) const supabaseUrl = process.env.SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; // Supabase URL Auflösung inline let resolvedUrl = supabaseUrl; if (resolvedUrl && typeof window !== "undefined") { try { const parsed = new URL(resolvedUrl); if (parsed.hostname === "supabase-kong" || parsed.hostname === "kong") { parsed.hostname = window.location.hostname; resolvedUrl = parsed.toString().replace(/\/$/, ""); } } catch { resolvedUrl = resolvedUrl .replace("//supabase-kong", `//${window.location.hostname}`) .replace("//kong", `//${window.location.hostname}`); } } // Browser Client inline erstellen const supabase = createBrowserClient( resolvedUrl!, supabaseAnonKey!, { cookieOptions: { name: "webshop-auth-token", }, } ); // Auf Auth-Statusänderungen reagieren useEffect(() => { const { data: { subscription }, } = supabase.auth.onAuthStateChange((event, session) => { setCurrentUser(session?.user ?? null); }); return () => { subscription.unsubscribe(); }; }, [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 () => { await supabase.auth.signOut(); setCurrentUser(null); setIsMobileMenuOpen(false); router.refresh(); router.push("/"); }; return ( <>
CASPOS Store Demo {/* Desktop Navigation */} {/* Mobile Hamburger Trigger */}
{/* Mobile Menu Panel */} {isMobileMenuOpen && (
setIsMobileMenuOpen(false)} > Bestellen setIsMobileMenuOpen(false)} > Wiki setIsMobileMenuOpen(false)} > Support {currentUser && ( <>
Mein Account ({currentUser.email})
setIsMobileMenuOpen(false)} > Account Kunden )}
{currentUser ? ( ) : ( )}
)} ); }