"use client" import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from "@/components/ui/command" import { useTheme } from "@/hooks/use-theme" import { useWebSocketContext } from "@/hooks/use-websocket-context" import { formatNezhaInfo } from "@/lib/utils" import { NezhaWebsocketResponse } from "@/types/nezha-api" import { Home, Moon, Sun, SunMoon } from "lucide-react" import { useEffect, useState } from "react" import { useTranslation } from "react-i18next" import { useNavigate } from "react-router-dom" export function DashCommand() { const [open, setOpen] = useState(false) const [search, setSearch] = useState("") const navigate = useNavigate() const { t } = useTranslation() const { setTheme } = useTheme() const { lastMessage, connected } = useWebSocketContext() const nezhaWsData = lastMessage ? (JSON.parse(lastMessage.data) as NezhaWebsocketResponse) : null useEffect(() => { const down = (e: KeyboardEvent) => { if (e.key === "k" && (e.metaKey || e.ctrlKey)) { e.preventDefault() setOpen((open) => !open) } } document.addEventListener("keydown", down) return () => document.removeEventListener("keydown", down) }, []) if (!connected || !nezhaWsData) return null const shortcuts = [ { keywords: ["home", "homepage"], icon: , label: t("Home"), action: () => navigate("/"), }, { keywords: ["light", "theme", "lightmode"], icon: , label: t("ToggleLightMode"), action: () => setTheme("light"), }, { keywords: ["dark", "theme", "darkmode"], icon: , label: t("ToggleDarkMode"), action: () => setTheme("dark"), }, { keywords: ["system", "theme", "systemmode"], icon: , label: t("ToggleSystemMode"), action: () => setTheme("system"), }, ].map((item) => ({ ...item, value: `${item.keywords.join(" ")} ${item.label}`, })) return ( <> {t("NoResults")} {nezhaWsData.servers && nezhaWsData.servers.length > 0 && ( <> {nezhaWsData.servers.map((server) => ( { navigate(`/server/${server.id}`) setOpen(false) }} > {formatNezhaInfo(nezhaWsData.now, server).online ? ( ) : ( )} {server.name} ))} )} {shortcuts.map((item) => ( { item.action() setOpen(false) }} > {item.icon} {item.label} ))} ) }