import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Search, Grid3X3, Table2, Moon, Sun, CircleUserIcon, Menu, } from "lucide-react"; import { useEffect, useState } from "react"; import { useLocation } from "react-router-dom"; import { useIsMobile } from "@/hooks/useMobile"; import { useConfigItem } from "@/config"; import { useTheme } from "@/hooks/useTheme"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; interface HeaderProps { viewMode: "grid" | "table"; setViewMode: (mode: "grid" | "table") => void; searchTerm: string; setSearchTerm: (term: string) => void; } export const Header = ({ viewMode, setViewMode, searchTerm, setSearchTerm, }: HeaderProps) => { const { appearance, setAppearance } = useTheme(); const [isSearchOpen, setIsSearchOpen] = useState(false); const location = useLocation(); const isInstancePage = location.pathname.startsWith("/instance"); const isMobile = useIsMobile(); const enableTitle = useConfigItem("enableTitle"); const sitename = useConfigItem("titleText"); const enableLogo = useConfigItem("enableLogo"); const logoUrl = useConfigItem("logoUrl"); const enableSearchButton = useConfigItem("enableSearchButton"); const enableAdminButton = useConfigItem("enableAdminButton"); useEffect(() => { if (sitename) { document.title = sitename; } }, [sitename]); const toggleAppearance = () => { setAppearance(appearance === "light" ? "dark" : "light"); }; return (
{enableLogo && logoUrl && ( logo )} {enableTitle && {sitename}}
{!isInstancePage && ( <> {isMobile ? ( <> {enableSearchButton && (
) => setSearchTerm(e.target.value)} />
)} setViewMode(viewMode === "grid" ? "table" : "grid") }> {viewMode === "grid" ? ( ) : ( )} {viewMode === "grid" ? "表格视图" : "网格视图"} {appearance === "dark" ? ( ) : ( )} {appearance === "dark" ? "浅色模式" : "深色模式"} {enableAdminButton && ( 管理员 )} ) : ( <>
) => setSearchTerm(e.target.value) } />
{enableSearchButton && ( )} {enableAdminButton && ( )} )} )} {isInstancePage && ( <> {isMobile ? ( {appearance === "dark" ? ( ) : ( )} {appearance === "dark" ? "浅色模式" : "深色模式"} {enableAdminButton && ( 管理员 )} ) : ( <> {enableAdminButton && ( )} )} )}
); };