"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}
)
}