"use client"; import { useState, useEffect } from "react"; import { Link, useLocale, usePathname, useRouter, useTranslation } from "@/i18n/navigation"; import { getStoredUserEmail } from "@/app/lib/pocketbase"; import { useCrossSiteUrls } from "@/app/lib/useCrossSiteUrls"; import AuthModal from "./AuthModal"; import ThemeToggle from "./ThemeToggle"; import UserAvatar from "./UserAvatar"; export default function Header() { const { t } = useTranslation("common"); const { t: tNav } = useTranslation("nav"); const locale = useLocale(); const pathname = usePathname(); const router = useRouter(); const [mobileOpen, setMobileOpen] = useState(false); const [scrolled, setScrolled] = useState(false); const [authOpen, setAuthOpen] = useState(false); const [userEmail, setUserEmail] = useState(null); const { vipUrl } = useCrossSiteUrls(); const navLinks = [ { labelKey: "roadmap" as const, href: "#roadmap" }, { labelKey: "tools" as const, href: "#tools" }, { labelKey: "community" as const, href: vipUrl, external: true }, { labelKey: "resources" as const, href: "#resources" }, ]; useEffect(() => { let mounted = true; (async () => { try { const res = await fetch("/api/auth/me", { credentials: "include" }); const data = await res.json(); if (!mounted) return; if (data?.user && data?.token) { const { pbSaveAuth } = await import("@/app/lib/pocketbase"); pbSaveAuth(data.token, { id: data.user.id, email: data.user.email }); setUserEmail(data.user.email); return; } } catch { /* ignore */ } if (mounted) setUserEmail(getStoredUserEmail()); })(); return () => { mounted = false; }; }, []); return (
🌍 {t("siteName")} {t("siteNameShort")}
{userEmail ? ( setUserEmail(null)} /> ) : ( )} {t("explore")}
{mobileOpen && (
)} setAuthOpen(false)} onSuccess={(email) => setUserEmail(email)} />
); }