/** * Copyright (c) 2023-present Plane Software, Inc. and contributors * SPDX-License-Identifier: AGPL-3.0-only * See the LICENSE file for details. */ import { Fragment, useEffect, useState } from "react"; import { observer } from "mobx-react"; import { useTheme as useNextTheme } from "next-themes"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { BrainCog, ChevronDown, ExternalLink, Image, LogOut, Mail, Palette, Settings, UserCog2 } from "lucide-react"; import { Menu, Transition } from "@headlessui/react"; // plane imports import { API_BASE_URL } from "@plane/constants"; import { LockIcon, WorkspaceIcon } from "@plane/propel/icons"; import { AuthService } from "@plane/services"; import { Avatar } from "@plane/ui"; import { cn, getFileURL } from "@plane/utils"; // assets import NodeDcLogo from "@/app/assets/logos/nodedc-logo.svg?url"; // hooks import { useUser } from "@/hooks/store"; // local imports const authService = new AuthService(); const PRIMARY_NAVIGATION = [ { label: "Основное", href: "/general/", Icon: Settings }, { label: "Почта", href: "/email/", Icon: Mail }, { label: "Аутентификация", href: "/authentication/", Icon: LockIcon }, { label: "Воркспейсы", href: "/workspace/", Icon: WorkspaceIcon }, ]; const FEATURE_NAVIGATION = [ { label: "ИИ", href: "/ai/", Icon: BrainCog, description: "OpenAI модель и API-ключ" }, { label: "Изображения", href: "/image/", Icon: Image, description: "Внешние библиотеки изображений" }, ]; export const AdminHeader = observer(function AdminHeader() { const pathName = usePathname(); const { currentUser, signOut } = useUser(); const { resolvedTheme, setTheme } = useNextTheme(); const [csrfToken, setCsrfToken] = useState(undefined); const isFeatureRoute = FEATURE_NAVIGATION.some((item) => pathName?.startsWith(item.href)); const adminName = currentUser?.display_name || currentUser?.email || "Глобальный админ"; const avatarName = currentUser?.display_name || currentUser?.email || "DC"; const handleThemeSwitch = () => { const newTheme = resolvedTheme === "dark" ? "light" : "dark"; setTheme(newTheme); }; useEffect(() => { if (csrfToken === undefined) void authService.requestCSRFToken().then((data) => data?.csrf_token && setCsrfToken(data.csrf_token)); }, [csrfToken]); return (
NODE.DC {adminName} {currentUser ? ( ) : ( )}
{adminName} {currentUser?.email}
{resolvedTheme === "dark" ? "Светлая тема" : "Темная тема"}
Выйти
); });