'use client'; import { useState } from 'react'; import { useSession, signOut } from 'next-auth/react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { User, Upload, Users, LogIn, UserPlus } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Popover, PopoverContent, PopoverTrigger, } from '@/components/ui/popover'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { LoginDialog } from '@/components/LoginDialog'; import { RegisterDialog } from '@/components/RegisterDialog'; import { ManageUsersPageClient } from '@/app/admin/users/ManageUsersPageClient'; function UserMenu() { const { data: session, status } = useSession(); const router = useRouter(); const [loginDialogOpen, setLoginDialogOpen] = useState(false); const [registerDialogOpen, setRegisterDialogOpen] = useState(false); const [manageUsersOpen, setManageUsersOpen] = useState(false); const [popoverOpen, setPopoverOpen] = useState(false); const handleSignOut = async () => { // Close any overlays tied to the authenticated state (e.g. Manage Users) // *before* the session clears, otherwise their effects/portals can unmount // mid-transition and throw (issue #57). setPopoverOpen(false); setManageUsersOpen(false); try { await signOut({ callbackUrl: '/' }); } catch (error) { console.error('[SIGN_OUT] Failed to sign out cleanly:', error); router.push('/'); } }; if (status === 'loading') { return
; } if (session?.user) { return ( <>Upload your own photos
{session.user.name || 'User'}
{session.user.email}