"use client"; import { createApiClient } from "@app/lib/api"; import { Avatar, AvatarFallback } from "@app/components/ui/avatar"; import { Button } from "@app/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@app/components/ui/dropdown-menu"; import { useEnvContext } from "@app/hooks/useEnvContext"; import { toast } from "@app/hooks/useToast"; import { formatAxiosError } from "@app/lib/api"; import { Laptop, LogOut, Moon, Sun } from "lucide-react"; import { useTheme } from "next-themes"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { useUserContext } from "@app/hooks/useUserContext"; import Disable2FaForm from "./Disable2FaForm"; import Enable2FaForm from "./Enable2FaForm"; import SupporterStatus from "./SupporterStatus"; export default function ProfileIcon() { const { setTheme, theme } = useTheme(); const { env } = useEnvContext(); const api = createApiClient({ env }); const { user, updateUser } = useUserContext(); const router = useRouter(); const [userTheme, setUserTheme] = useState<"light" | "dark" | "system">( theme as "light" | "dark" | "system" ); const [openEnable2fa, setOpenEnable2fa] = useState(false); const [openDisable2fa, setOpenDisable2fa] = useState(false); function getInitials() { return user.email.substring(0, 1).toUpperCase(); } function handleThemeChange(theme: "light" | "dark" | "system") { setUserTheme(theme); setTheme(theme); } function logout() { api.post("/auth/logout") .catch((e) => { console.error("Error logging out", e); toast({ title: "Error logging out", description: formatAxiosError(e, "Error logging out") }); }) .then(() => { router.push("/auth/login"); router.refresh(); }); } return ( <>

Signed in as

{user.email}

{user.serverAdmin && (

Server Admin

)}
{!user.twoFactorEnabled && ( setOpenEnable2fa(true)} > Enable Two-factor )} {user.twoFactorEnabled && ( setOpenDisable2fa(true)} > Disable Two-factor )} Theme {(["light", "dark", "system"] as const).map( (themeOption) => ( handleThemeChange(themeOption) } > {themeOption === "light" && ( )} {themeOption === "dark" && ( )} {themeOption === "system" && ( )} {themeOption} {userTheme === themeOption && ( )} ) )} logout()}> {/* */} Log Out
{user.email}
); }