"use client"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { Flame, Heart, LogOut, Palette, Settings, Sparkles, User, UserCog } from "lucide-react"; import { NotificationBell } from "@/components/notification-bell"; import { ThemeToggle } from "@/components/theme-toggle"; import { BrandMark } from "@/components/brand-mark"; import { useRealtimeGateway } from "@/hooks/use-realtime"; import { useLiveUser } from "@/hooks/use-live-user"; import { useAuth } from "@/lib/auth-store"; import { http } from "@/lib/api"; import { heartsOf, hasInfiniteHearts, MAX_HEARTS, INFINITE_HEARTS_LABEL } from "@/lib/hearts"; import { useState } from "react"; import { AvatarStudio } from "@/components/avatar-studio"; import { UserAvatar, avatarPaletteOf } from "@/components/ui/user-avatar"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; import { cn, formatFaNumber } from "@/lib/utils"; import { isVerifiedRole, VerifiedBadge } from "@/components/verified-badge"; const navLinks = [ { href: "/cap", label: "درخت مهارت" }, { href: "/unwrap", label: "مرکز" }, { href: "/leaderboard", label: "لیگها" }, ]; export function Navbar() { const router = useRouter(); const pathname = usePathname(); const user = useAuth((s) => s.user); const liveUser = useLiveUser(); useRealtimeGateway(); const [studioOpen, setStudioOpen] = useState(false); const locked = !!liveUser?.isLocked && !hasInfiniteHearts(liveUser.role); const infiniteHearts = hasInfiniteHearts(liveUser?.role); const effHearts = heartsOf(liveUser); const logout = () => { const { refreshToken, clear: clearAuth } = useAuth.getState(); void http.post("/api/auth/logout", refreshToken ? { refreshToken } : {}).catch(() => undefined); clearAuth(); router.replace("/"); }; // Guest chrome: home + login only if (!user) { return ( {pathname !== "/login" && ( ورود )} ); } return ( {!locked && ( {navLinks.map((l) => { const active = pathname === l.href || pathname.startsWith(l.href + "/"); return ( {l.label} ); })} )} {liveUser && ( <> {formatFaNumber(liveUser.streakCurrent)} {formatFaNumber(liveUser.xp)} {infiniteHearts ? ( {INFINITE_HEARTS_LABEL} ) : ( <> {formatFaNumber(effHearts)}/{formatFaNumber(MAX_HEARTS)} > )} {liveUser.name} {isVerifiedRole(liveUser.role) && } {liveUser.email} {roleLabel(liveUser.role)} router.push("/profile")}> پروفایل من router.push("/settings")}> تنظیمات setStudioOpen(true)}> ویرایش آواتار {liveUser.role === "admin" && ( router.push("/admin")}> پنل مدیریت )} {liveUser.role === "mentor" && ( router.push("/admin")}> پنل منتور )} خروج ویرایش آواتار setStudioOpen(false)} /> > )} ); } function roleLabel(role: string): string { if (role === "admin") return "ادمین"; if (role === "mentor") return "منتور"; return "هنرجو"; }
{liveUser.name} {isVerifiedRole(liveUser.role) && }
{liveUser.email}
{roleLabel(liveUser.role)}