'use client' import { signOut } from "@/app/actions/user" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { toast } from "@/hooks/use-toast" import { aboutOpenAtom, currentUserAtom, settingsAtom, userSelectAtom } from "@/lib/atoms" import { useAtom } from "jotai" import { ArrowRightLeft, Crown, Info, LogOut, Moon, Palette, Settings, Sun, User } from "lucide-react" import { useTranslations } from 'next-intl' import { useTheme } from "next-themes" import Link from "next/link" import { useState } from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle } from './ui/dialog' import UserForm from './UserForm' export function Profile() { const t = useTranslations('Profile'); const [settings] = useAtom(settingsAtom) const [userSelect, setUserSelect] = useAtom(userSelectAtom) const [isEditing, setIsEditing] = useState(false) const [aboutOpen, setAboutOpen] = useAtom(aboutOpenAtom) const { theme, setTheme } = useTheme() const [user] = useAtom(currentUserAtom) const [open, setOpen] = useState(false) const handleSignOut = async () => { try { await signOut() toast({ title: t('signOutSuccessTitle'), description: t('signOutSuccessDescription'), }) setTimeout(() => window.location.reload(), 300); } catch (error) { toast({ title: t('signOutErrorTitle'), description: t('signOutErrorDescription'), variant: "destructive", }) } } return ( <>
{user?.username || t('guestUsername')} {user?.isAdmin && } {user && ( )}
{user && ( )}
{ setOpen(false); // Close the dropdown setUserSelect(true); // Open the user select modal }}>
{t('switchUserButton')}
{/* need the Link element to be the direct child of the DropdownMenuItem, since we are using asChild here */} setOpen(false)} // Ensure dropdown closes on click >
{t('settingsLink')}
{ setOpen(false); // Close the dropdown setAboutOpen(true); // Open the about modal }}>
{t('aboutButton')}
{t('themeLabel')}
{/* Add the UserForm dialog */} {isEditing && user && ( setIsEditing(false)}> {t('editProfileModalTitle')} setIsEditing(false)} onSuccess={() => { setIsEditing(false); window.location.reload(); }} /> )} ) }