"use client" import { useEffect, useState } from "react" import Link from "next/link" import { useTheme } from "@/components/theme-provider" import { ChevronsUpDownIcon, LogOutIcon, MonitorIcon, MoonIcon, PaletteIcon, SettingsIcon, SunIcon, } from "lucide-react" import { cn } from "@/lib/utils" import { ensureAuthConfig, getClaims, isAuthEnabled, redirectToPortalLogout, } from "@/lib/auth" import { Avatar, AvatarFallback } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar, } from "@/components/ui/sidebar" /** Sidebar footer account menu — app-shell-1 NavUser. @see https://reui.io/preview/base/app-shell-1 */ const THEMES = [ { value: "light" as const, label: "Светлая", icon: , }, { value: "dark" as const, label: "Тёмная", icon: , }, { value: "system" as const, label: "Системная", icon: , }, ] function ThemeSegmentedToggle() { const { theme, setTheme } = useTheme() const [mounted, setMounted] = useState(false) useEffect(() => { setMounted(true) }, []) const currentTheme = mounted ? (theme ?? "system") : "system" return (
e.stopPropagation()} onPointerDown={(e) => e.stopPropagation()} > {THEMES.map(({ value, label, icon }) => { const isActive = currentTheme === value return ( ) })}
) } function initials(name: string, email: string): string { const base = (name || email || "?").trim() const parts = base.split(/\s+/).filter(Boolean) if (parts.length >= 2) { return (parts[0]![0]! + parts[1]![0]!).toUpperCase() } return base.slice(0, 2).toUpperCase() } export function NavUser() { const { isMobile } = useSidebar() const [name, setName] = useState("Оператор") const [email, setEmail] = useState("локальный доступ") const [showLogout, setShowLogout] = useState(false) useEffect(() => { void ensureAuthConfig().then(() => { const claims = getClaims() if (claims) { setName(claims.name || claims.email || "Пользователь") setEmail(claims.email || "") setShowLogout(isAuthEnabled()) } else if (isAuthEnabled()) { setName("Сессия") setEmail("требуется вход") setShowLogout(true) } }) }, []) const fallback = initials(name, email) return ( } > {fallback}
{name} {email}
{fallback}
{name} {email}
}> Настройки Тема
{showLogout ? ( redirectToPortalLogout()}> Выйти ) : null}
) }