import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { baseUrl } from "../../api/baseUrl"; import { cn } from "@/lib/utils"; import { TooltipPortal } from "@radix-ui/react-tooltip"; import { isDesktop } from "react-device-detect"; import { VscAccount } from "react-icons/vsc"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "../ui/dropdown-menu"; import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer"; import { DialogClose } from "../ui/dialog"; import { LuLogOut, LuSquarePen } from "react-icons/lu"; import useSWR from "swr"; import { useState } from "react"; import axios from "axios"; import { toast } from "sonner"; import SetPasswordDialog from "../overlay/SetPasswordDialog"; import { useTranslation } from "react-i18next"; type AccountSettingsProps = { className?: string; }; export default function AccountSettings({ className }: AccountSettingsProps) { const { t } = useTranslation(["views/settings"]); const { data: profile } = useSWR("profile"); const { data: config } = useSWR("config"); const logoutUrl = config?.proxy?.logout_url || `${baseUrl}api/logout`; const [passwordDialogOpen, setPasswordDialogOpen] = useState(false); const Container = isDesktop ? DropdownMenu : Drawer; const Trigger = isDesktop ? DropdownMenuTrigger : DrawerTrigger; const Content = isDesktop ? DropdownMenuContent : DrawerContent; const MenuItem = isDesktop ? DropdownMenuItem : DialogClose; const handlePasswordSave = async (password: string) => { if (!profile?.username || profile.username === "anonymous") return; axios .put(`users/${profile.username}/password`, { password }) .then((response) => { if (response.status === 200) { setPasswordDialogOpen(false); toast.success(t("users.toast.success.updatePassword"), { position: "top-center", }); } }) .catch((error) => { const errorMessage = error.response?.data?.message || error.response?.data?.detail || "Unknown error"; toast.error( t("users.toast.error.setPasswordFailed", { errorMessage, }), { position: "top-center", }, ); }); }; return (

{t("menu.user.account", { ns: "common" })}

{t("menu.user.current", { ns: "common", user: profile?.username || t("menu.user.anonymous", { ns: "common" }), })}{" "} {t("role." + profile?.role) && `(${t("role." + profile?.role, { ns: "common" })})`} {profile?.username && profile.username !== "anonymous" && ( setPasswordDialogOpen(true)} > {t("menu.user.setPassword", { ns: "common" })} )} {t("menu.user.logout", { ns: "common" })}
setPasswordDialogOpen(false)} username={profile?.username} />
); }