import * as Avatar from '@radix-ui/react-avatar'; import * as HoverCard from '@radix-ui/react-hover-card'; import { minidenticon } from 'minidenticons'; import { memo, useMemo } from 'react'; import { Link } from 'react-router-dom'; import { RepostIcon } from '@shared/icons'; import { NIP05 } from '@shared/nip05'; import { MoreActions } from '@shared/notes'; import { displayNpub, formatCreatedAt } from '@utils/formater'; import { useProfile } from '@utils/hooks/useProfile'; export const User = memo(function User({ pubkey, eventId, time, variant = 'default', embedProfile, subtext, }: { pubkey: string; eventId?: string; time?: number; variant?: | 'default' | 'simple' | 'mention' | 'notify' | 'repost' | 'chat' | 'large' | 'thread' | 'miniavatar' | 'avatar' | 'stacked' | 'ministacked' | 'childnote'; embedProfile?: string; subtext?: string; }) { const { isLoading, user } = useProfile(pubkey, embedProfile); const createdAt = useMemo(() => formatCreatedAt(time, variant === 'chat'), [time]); const fallbackName = useMemo(() => displayNpub(pubkey, 16), [pubkey]); const fallbackAvatar = useMemo( () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50)), [pubkey] ); if (variant === 'mention') { if (isLoading) { return (
{fallbackName}
· {createdAt}
); } return (
{pubkey}
{user?.name || user?.display_name || user?.displayName || fallbackName}
· {createdAt}
); } if (variant === 'notify') { if (isLoading) { return (
{fallbackName}
); } return (
{pubkey}
{user?.name || user?.display_name || user?.displayName || fallbackName}
); } if (variant === 'large') { if (isLoading) { return (
); } return (
{pubkey}

{user?.name || user?.display_name || user?.displayName}

{user?.about || user?.bio || 'No bio'}

); } if (variant === 'simple') { if (isLoading) { return (
); } return (
{pubkey}

{user?.name || user?.display_name || user?.displayName}

{user?.nip05 || user?.username || fallbackName}

); } if (variant === 'avatar') { if (isLoading) { return (
); } return ( {pubkey} ); } if (variant === 'miniavatar') { if (isLoading) { return (
); } return ( {pubkey} ); } if (variant === 'childnote') { if (isLoading) { return ( <>
{fallbackName}
{subtext}:
); } return ( <> {pubkey}
{user?.display_name || user?.name || user?.displayName || fallbackName}{' '}
{subtext}:
); } if (variant === 'stacked') { if (isLoading) { return (
); } return ( {pubkey} ); } if (variant === 'ministacked') { if (isLoading) { return (
); } return ( {pubkey} ); } if (variant === 'repost') { if (isLoading) { return (
); } return (
{pubkey}
{user?.name || user?.display_name || user?.displayName || fallbackName}
reposted
); } if (variant === 'thread') { if (isLoading) { return (
); } return (
{pubkey}
{user?.name || user?.display_name || user?.displayName || 'Anon'}
{createdAt} · {fallbackName}
); } if (isLoading) { return (
{fallbackName}
); } return (
{pubkey}
{user?.name || user?.display_name || user?.displayName || fallbackName}
{createdAt}
{pubkey}
{user?.name || user?.display_name || user?.displayName || user?.username}
{user?.nip05 ? ( ) : ( {fallbackName} )}

{user?.about}

View profile Message
); });