"use client"; import { useState, useEffect, useCallback } from "react"; import { Link, useLocale, usePathname, useRouter, useTranslation } from "@/i18n/navigation"; import { getStoredUserEmail, pbLogout } from "@/app/lib/pocketbase"; import { resolveAuthUser } from "@/app/lib/api-client"; import { getNavLinks } from "@/config"; import AuthModal from "./AuthModal"; import ThemeToggle from "./ThemeToggle"; import SiteMenu from "./SiteMenu"; import UserAvatar from "./UserAvatar"; import NotificationBell from "./NotificationBell"; export default function NavbarComponent() { const { t } = useTranslation("common"); const { t: tNav } = useTranslation("nav"); const locale = useLocale(); const pathname = usePathname(); const router = useRouter(); const [mobileOpen, setMobileOpen] = useState(false); const [menuOpen, setMenuOpen] = useState(false); const [authOpen, setAuthOpen] = useState(false); const [userEmail, setUserEmail] = useState(null); const [userVip, setUserVip] = useState(false); const navLinks = getNavLinks(); const fetchAuth = useCallback(async () => { const session = await resolveAuthUser(); if (session) { const { pbSaveAuth } = await import("@/app/lib/pocketbase"); pbSaveAuth(session.token, { id: session.user.id, email: session.user.email }); setUserEmail(session.user.email); setUserVip(!!session.user.vip); return; } setUserEmail(getStoredUserEmail()); setUserVip(false); }, []); useEffect(() => { fetchAuth(); }, [fetchAuth]); useEffect(() => { const onAuthUpdated = () => fetchAuth(); const onVipUpdated = () => fetchAuth(); window.addEventListener("auth:updated", onAuthUpdated); window.addEventListener("vip:updated", onVipUpdated); return () => { window.removeEventListener("auth:updated", onAuthUpdated); window.removeEventListener("vip:updated", onVipUpdated); }; }, [fetchAuth]); const handleLogout = useCallback(async () => { await pbLogout(); setUserEmail(null); setUserVip(false); router.replace("/"); }, [router]); const isActive = useCallback((href: string) => { if (href.startsWith("/#")) return false; if (href === "/") return pathname === "/"; if (href === "/digital") { return /^\/(zh|en)\/digital(?:\/|$)/.test(pathname); } return pathname.startsWith(href); }, [pathname]); return ( ); }