"use client"; import type { ReactNode } from "react"; import { useCallback } from "react"; import { Badge, Indicator, Kbd, Loader, Menu, Text } from "@mantine/core"; import { IconBrandDocker, IconHome, IconLogin, IconLogout, IconSettings, IconRobot, IconTool, } from "@tabler/icons-react"; import type { RouterOutputs } from "@homarr/api"; import { signOut, useSession } from "@homarr/auth/client"; import { hotkeys, invariantTechnicalLabels } from "@homarr/definitions"; import { useModalAction } from "@homarr/modals"; import { useI18n } from "@homarr/translation/client"; import { Link } from "@homarr/ui"; import { useAuthContext } from "~/app/[locale]/_client-providers/session"; import { useOptionalHomarrAssistant } from "./assistant/assistant-context"; import { CurrentColorSchemeCombobox } from "./color-scheme/current-color-scheme-combobox"; import { CurrentLanguageCombobox } from "./language/current-language-combobox"; import { DockerQuickAccessModal } from "./layout/header/docker-quick-access-modal"; import { AvailableUpdatesMenuItem } from "./layout/header/update"; interface UserAvatarMenuProps { children: ReactNode; availableUpdates?: RouterOutputs["updateChecker"]["getAvailableUpdates"]; isDockerEnabled?: boolean; } const formatHotkeyLabel = (hotkey: string, modifierLabel: string) => hotkey .split("+") .map((key) => (key === "mod" ? modifierLabel : `${key.charAt(0).toUpperCase()}${key.slice(1)}`)) .join(" + "); export const UserAvatarMenu = ({ children, availableUpdates, isDockerEnabled }: UserAvatarMenuProps) => { const t = useI18n("common.userAvatar.menu"); const session = useSession(); const { logoutUrl } = useAuthContext(); const { openModal: openDockerModal } = useModalAction(DockerQuickAccessModal); const assistant = useOptionalHomarrAssistant(); const handleSignout = useCallback(async () => { const redirectUrl = logoutUrl ?? "/auth/login"; await signOut({ redirect: false, }); window.location.assign(redirectUrl); }, [logoutUrl]); return ( // We use keepMounted so we can add event listeners to prevent navigating away without saving the board
); };