"use client"; import { DropdownMenuSub } from "@radix-ui/react-dropdown-menu"; import { authClient } from "@repo/auth/client"; import { config } from "@repo/config"; import { useSession } from "@saas/auth/hooks/use-session"; import { UserAvatar } from "@shared/components/UserAvatar"; import { clearCache } from "@shared/lib/cache"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "@ui/components/dropdown-menu"; import { BookIcon, HardDriveIcon, HomeIcon, LogOutIcon, MoonIcon, MoreVerticalIcon, SettingsIcon, SunIcon, } from "lucide-react"; import { useTranslations } from "next-intl"; import { useTheme } from "next-themes"; import Link from "next/link"; import { useState } from "react"; export function UserMenu({ showUserName }: { showUserName?: boolean }) { const t = useTranslations(); const { user } = useSession(); const { setTheme: setCurrentTheme, theme: currentTheme } = useTheme(); const [theme, setTheme] = useState(currentTheme ?? "system"); const colorModeOptions = [ { value: "system", label: "System", icon: HardDriveIcon, }, { value: "light", label: "Light", icon: SunIcon, }, { value: "dark", label: "Dark", icon: MoonIcon, }, ]; const onLogout = () => { authClient.signOut({ fetchOptions: { onSuccess: async () => { await clearCache(); window.location.href = new URL( config.auth.redirectAfterLogout, window.location.origin, ).toString(); }, }, }); }; if (!user) { return null; } const { name, email, image } = user; return ( {name} {email} {/* Color mode selection */} {t("app.userMenu.colorMode")} { setTheme(value); setCurrentTheme(value); }} > {colorModeOptions.map((option) => ( {option.label} ))} {t("app.userMenu.accountSettings")} {t("app.userMenu.documentation")} {t("app.userMenu.home")} {t("app.userMenu.logout")} ); }