"use client"; import { Box, Flex, HStack, IconButton, Link as ChakraLink, Stack, VStack, Button, MenuItem, ClientOnly, Text, Separator, } from "@chakra-ui/react"; import { Link, useRouter } from "@/i18n/navigation"; import { ColorModeButton } from "@/components/ui/color-mode"; import { PopoverBody, PopoverContent, PopoverRoot, PopoverTrigger, } from "@/components/ui/overlays/popover"; import { RxHamburgerMenu } from "react-icons/rx"; import { NAV_ITEMS, getVisibleNavItems } from "@/config/navigation"; import HeaderLink from "./header-link"; import MobileHeaderLink from "./mobile-header-link"; import LocaleSwitcher from "@/components/ui/locale-switcher"; import { useEffect, useState } from "react"; import { useTranslations } from "next-intl"; import { MenuContent, MenuRoot, MenuTrigger, } from "@/components/ui/overlays/menu"; import { Avatar } from "@/components/ui/data-display/avatar"; import { Skeleton } from "@/components/ui/feedback/skeleton"; import { signOut, useSession } from "next-auth/react"; import { authConfig } from "@/config/auth"; import { LoginModal } from "@/components/auth/login-modal"; import { isAdminRole } from "@/lib/auth/roles"; import { LuLogIn, LuUser, LuShield, LuZap } from "react-icons/lu"; import GlobalSearch from "@/components/search/global-search"; export default function Header() { const t = useTranslations(); const [isSticky, setIsSticky] = useState(false); const [loginModalOpen, setLoginModalOpen] = useState(false); const [loginModalMode, setLoginModalMode] = useState<"login" | "register">("login"); const router = useRouter(); const { data: session, status } = useSession(); const isAuthenticated = !!session; const isLoading = status === "loading"; const visibleItems = getVisibleNavItems(NAV_ITEMS, isAuthenticated); useEffect(() => { const handleScroll = () => setIsSticky(window.scrollY >= 10); window.addEventListener("scroll", handleScroll); return () => window.removeEventListener("scroll", handleScroll); }, []); const handleLogout = async () => { await signOut({ redirect: false }); if (authConfig.isAuthRequired) { router.replace("/home"); } }; const openAuthModal = (mode: "login" | "register") => { setLoginModalMode(mode); setLoginModalOpen(true); }; // Desktop auth section const renderAuthSection = () => { if (isLoading) return ; if (isAuthenticated) { return ( router.push("/profile")}> {t("nav.profile")} {session?.user && isAdminRole(session.user.roles) && ( router.push("/admin")}> {t("nav.admin")} )} {t("auth.sign-out")} ); } return ( ); }; // Mobile auth section const renderMobileAuthSection = () => { if (isLoading) return ; if (isAuthenticated) { return ( {session?.user?.name || session?.user?.email} ); } return ( ); }; return ( <> {/* Logo */} Suggest BET {/* DESKTOP NAVIGATION */} {visibleItems.map((item) => ( ))} {/* Right side actions */} {/* Global Search (Desktop) */} }> {renderAuthSection()} {/* MOBILE NAVIGATION */} }> {visibleItems.map((item) => ( ))} {renderMobileAuthSection()} {/* Login Modal */} ); }