'use client'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { resetAnalyticsIdentity, useAnalyticsIdentity } from '@/lib/analytics'; import { isRemoteImageUrl } from '@/lib/avatar'; import { useAuthActions } from '@convex-dev/auth/react'; import { useConvexAuth, useQuery } from 'convex/react'; import { api } from '@spoon/backend/convex/_generated/api.js'; import { BasedAvatar, Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@spoon/ui'; export const AvatarDropdown = () => { const router = useRouter(); const { isLoading, isAuthenticated } = useConvexAuth(); const { signOut } = useAuthActions(); const user = useQuery(api.auth.getUser, {}); useAnalyticsIdentity(user?._id); const remoteImageUrl = isRemoteImageUrl(user?.image) ? user?.image : null; const currentImageUrl = useQuery( api.files.getImageUrl, user?.image && !remoteImageUrl ? { storageId: user.image } : 'skip', ); const avatarUrl = remoteImageUrl ?? currentImageUrl; // Empty/whitespace names must fall through to the email, so intentionally // treat a blank string as "no name" (nullish coalescing would keep it). const trimmedName = user?.name?.trim(); const displayName = trimmedName?.length ? trimmedName : user?.email?.trim(); if (isLoading) { return (