"use client" import * as React from "react" import Link from "next/link" import { usePathname } from "next/navigation" import { Bell, Menu, Search } from "lucide-react" import { signOut, useSession } from "next-auth/react" import { Button } from "@/shared/components/ui/button" import { Input } from "@/shared/components/ui/input" import { Separator } from "@/shared/components/ui/separator" import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@/shared/components/ui/breadcrumb" import { Avatar, AvatarFallback } from "@/shared/components/ui/avatar" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/shared/components/ui/dropdown-menu" import { useSidebar } from "./sidebar-provider" import { NAV_CONFIG } from "../config/navigation" // Build lookup map for breadcrumbs const BREADCRUMB_MAP = new Map() Object.values(NAV_CONFIG).forEach((items) => { items.forEach((item) => { BREADCRUMB_MAP.set(item.href, item.title) item.items?.forEach((subItem) => { BREADCRUMB_MAP.set(subItem.href, subItem.title) }) }) }) export function SiteHeader() { const pathname = usePathname() const { toggleSidebar, isMobile } = useSidebar() const { data: session, status } = useSession() const name = session?.user?.name ?? "" const email = session?.user?.email ?? "" const displayName = name || email || (status === "loading" ? "加载中..." : "未登录") const fallbackBase = name || email || "?" const avatarFallback = fallbackBase .split(/\s+/) .filter(Boolean) .slice(0, 2) .map((p) => p[0]?.toUpperCase()) .join("") // Generate breadcrumbs const segments = pathname.split("/").filter(Boolean) const breadcrumbs = segments .map((segment, index) => { const href = `/${segments.slice(0, index + 1).join("/")}` const title = BREADCRUMB_MAP.get(href) || segment.charAt(0).toUpperCase() + segment.slice(1) return { href, title, isLast: index === segments.length - 1 } }) .filter((b) => !["admin", "teacher", "student", "parent"].includes(b.title.toLowerCase())) return (
{/* Mobile Toggle */} {isMobile && ( )} {/* Breadcrumbs */} {breadcrumbs.length > 0 ? ( breadcrumbs.map((crumb) => ( {crumb.isLast ? ( {crumb.title} ) : ( {crumb.title} )} {!crumb.isLast && } )) ) : ( Home )}
{/* Global Search */}
{/* Notifications */} {/* User Nav */}

{displayName}

{email ? (

{email}

) : null}
Profile Settings { e.preventDefault() signOut({ callbackUrl: "/login" }) }} > Log out
) }