"use client"; import type { CSSProperties, RefObject } from "react"; import { Dropdown } from "antd"; import { Keyboard, LogOut, Settings2, Shield } from "lucide-react"; import type { ItemType } from "antd/es/menu/interface"; import Link from "next/link"; import { AnimatedThemeToggler } from "@/components/ui/animated-theme-toggler"; import { GitHubLink } from "@/components/layout/github-link"; import { VersionReleaseModal } from "@/components/layout/version-release-modal"; import { cn } from "@/lib/utils"; import { canvasThemes } from "@/lib/canvas-theme"; import { useConfigStore } from "@/stores/use-config-store"; import { useThemeStore } from "@/stores/use-theme-store"; import { useUserStore } from "@/stores/use-user-store"; type UserStatusActionsProps = { showConfig?: boolean; variant?: "default" | "canvas"; onOpenShortcuts?: () => void; accountOpen?: boolean; onAccountOpenChange?: (open: boolean) => void; accountRef?: RefObject; getPopupContainer?: (node: HTMLElement) => HTMLElement; }; export function UserStatusActions({ showConfig = true, variant = "default", onOpenShortcuts, accountOpen, onAccountOpenChange, accountRef, getPopupContainer, }: UserStatusActionsProps) { const theme = useThemeStore((state) => state.theme); const setTheme = useThemeStore((state) => state.setTheme); const user = useUserStore((state) => state.user); const logout = useUserStore((state) => state.clearSession); const openConfigDialog = useConfigStore((state) => state.openConfigDialog); const canvasTheme = canvasThemes[theme]; const userName = user?.username || "用户"; const avatarText = (userName.trim()[0] || "U").toUpperCase(); const naturalIconClass = "inline-flex size-8 shrink-0 items-center justify-center text-stone-600 transition hover:text-stone-950 dark:text-stone-300 dark:hover:text-white [&_svg]:size-4"; const iconStyle: CSSProperties | undefined = variant === "canvas" ? { color: canvasTheme.node.text } : undefined; const versionStyle = iconStyle; const gitHubClassName = variant === "canvas" ? "size-11 text-base" : undefined; const gitHubStyle = iconStyle; const avatarStyle: CSSProperties | undefined = variant === "canvas" ? { borderColor: canvasTheme.toolbar.border, color: canvasTheme.node.text } : undefined; const menuItems: ItemType[] = [ { key: "user", disabled: true, label: {userName} }, ...(user?.role === "admin" ? [{ key: "admin", icon: , label: 管理后台 }] : []), ...(onOpenShortcuts ? [{ key: "shortcuts", icon: , label: "快捷键", onClick: onOpenShortcuts }] : []), { type: "divider" }, { key: "logout", icon: , label: "退出登录", onClick: logout }, ]; return (
{showConfig ? ( ) : null}
); }