'use client' 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 { Settings, Info, User, Moon, Sun, Palette, ArrowRightLeft, LogOut, Crown } from "lucide-react" import { Dialog, DialogContent, DialogHeader, DialogTitle } from './ui/dialog' import UserForm from './UserForm' import Link from "next/link" import { useAtom } from "jotai" import { settingsAtom, userSelectAtom } from "@/lib/atoms" import AboutModal from "./AboutModal" import { useEffect, useState } from "react" import { useTheme } from "next-themes" import { signOut } from "@/app/actions/user" import { toast } from "@/hooks/use-toast" import { useHelpers } from "@/lib/client-helpers" import { useTranslations } from 'next-intl' export function Profile() { const t = useTranslations('Profile'); const [settings] = useAtom(settingsAtom) const [userSelect, setUserSelect] = useAtom(userSelectAtom) const [isEditing, setIsEditing] = useState(false) const [showAbout, setShowAbout] = useState(false) const { theme, setTheme } = useTheme() const { currentUser: user } = useHelpers() 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')}
{t('settingsLink')}
{t('themeLabel')}
setShowAbout(false)} /> {/* Add the UserForm dialog */} {isEditing && user && ( setIsEditing(false)}> {t('editProfileModalTitle')} setIsEditing(false)} onSuccess={() => { setIsEditing(false); window.location.reload(); }} /> )} ) }