"use client"; import { useRouter } from "next/navigation"; import { useAuth } from "../auth-context"; import { sharedStyles } from "../styles/shared"; import constants from "../../../shared/constants.json"; const { ADMIN, REGULAR } = constants.roles; type PageId = | "profile" | "invites" | "exchange" | "trades" | "admin-invites" | "admin-availability" | "admin-trades" | "admin-price-history"; interface HeaderProps { currentPage: PageId; } interface NavItem { id: PageId; label: string; href: string; regularOnly?: boolean; adminOnly?: boolean; } const REGULAR_NAV_ITEMS: NavItem[] = [ { id: "exchange", label: "Exchange", href: "/exchange", regularOnly: true }, { id: "trades", label: "My Trades", href: "/trades", regularOnly: true }, { id: "invites", label: "My Invites", href: "/invites", regularOnly: true }, { id: "profile", label: "My Profile", href: "/profile", regularOnly: true }, ]; const ADMIN_NAV_ITEMS: NavItem[] = [ { id: "admin-trades", label: "Trades", href: "/admin/trades", adminOnly: true }, { id: "admin-availability", label: "Availability", href: "/admin/availability", adminOnly: true }, { id: "admin-invites", label: "Invites", href: "/admin/invites", adminOnly: true }, { id: "admin-price-history", label: "Prices", href: "/admin/price-history", adminOnly: true }, ]; export function Header({ currentPage }: HeaderProps) { const { user, logout, hasRole } = useAuth(); const router = useRouter(); const isRegularUser = hasRole(REGULAR); const isAdminUser = hasRole(ADMIN); const handleLogout = async () => { await logout(); router.push("/login"); }; if (!user) return null; // Build nav items based on user role // Admin users see admin nav items, regular users see regular nav items const navItems = isAdminUser ? ADMIN_NAV_ITEMS : REGULAR_NAV_ITEMS; const visibleItems = navItems.filter( (item) => (!item.regularOnly || isRegularUser) && (!item.adminOnly || isAdminUser) ); return (
{visibleItems.map((item, index) => ( {index > 0 && } {item.id === currentPage ? ( {item.label} ) : ( {item.label} )} ))}
{user.email}
); }