"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"; import { signOut } from "@/lib/actions/auth"; import { resolveSupabaseUrl } from "@/lib/utils"; import { DemoWrapper } from "./DemoWrapper"; interface NavbarClientProps { user: User | null; role?: string; } export function NavbarClient({ user, role = "partner" }: NavbarClientProps) { const router = useRouter(); const [currentUser, setCurrentUser] = useState(user); const [userRole, setUserRole] = useState(role); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [open, setOpen] = useState(false); const [pathname, setPathname] = useState("/"); useEffect(() => { setPathname(window.location.pathname); }, []); useEffect(() => { setCurrentUser(user); setUserRole(role); }, [user, role]); // 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; // Browser Client inline erstellen const supabase = createBrowserClient( resolveSupabaseUrl(supabaseUrl)!, supabaseAnonKey!, { cookieOptions: { name: "webshop-auth-token", }, } ); // Auf Auth-Statusänderungen reagieren useEffect(() => { const { data: { subscription }, } = supabase.auth.onAuthStateChange(async (event, session) => { setCurrentUser(session?.user ?? null); if (session?.user) { try { const { data } = await supabase .from("users") .select("role") .eq("id", session.user.id) .single(); if (data) { setUserRole(data.role); } } catch { setUserRole("partner"); } } else { setUserRole("partner"); } }); return () => { subscription.unsubscribe(); }; }, [supabase]); const handleSignOut = async () => { try { await signOut(); } catch (e) { console.error("Fehler beim Server-Signout:", e); } try { await supabase.auth.signOut(); } catch (e) { console.error("Fehler beim Client-Signout:", e); } setCurrentUser(null); setIsMobileMenuOpen(false); router.push("/"); router.refresh(); }; return ( <>
CASPOS Logo Demo {/* Desktop Navigation */} {/* Mobile Hamburger Trigger */}
{/* Mobile Menu Panel */} {isMobileMenuOpen && (
setIsMobileMenuOpen(false)} > Bestellen setIsMobileMenuOpen(false)} > Wiki setIsMobileMenuOpen(false)} > Support {currentUser && ( <>
Mein Account ({currentUser.email})
{userRole === "admin" ? ( <> setIsMobileMenuOpen(false)} > Admin ) : ( <> setIsMobileMenuOpen(false)} > Kundenliste setIsMobileMenuOpen(false)} > Bestellungen )} )}
{currentUser ? ( ) : ( )}
)} ); }