'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 { settingsAtom, userSelectAtom } from "@/lib/atoms" import { useHelpers } from "@/lib/client-helpers" 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 AboutModal from "./AboutModal" 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 [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(); }} /> )} ) }