import * as Avatar from '@radix-ui/react-avatar';
import * as HoverCard from '@radix-ui/react-hover-card';
import { minidenticon } from 'minidenticons';
import { memo } from 'react';
import { Link } from 'react-router-dom';
import { RepostIcon, WorldIcon } from '@shared/icons';
import { NIP05 } from '@shared/nip05';
import { MoreActions } from '@shared/notes';
import { formatCreatedAt } from '@utils/createdAt';
import { useProfile } from '@utils/hooks/useProfile';
import { displayNpub } from '@utils/shortenKey';
export const User = memo(function User({
pubkey,
eventId,
time,
variant = 'default',
embedProfile,
}: {
pubkey: string;
eventId?: string;
time?: number;
variant?:
| 'default'
| 'simple'
| 'mention'
| 'notify'
| 'repost'
| 'chat'
| 'large'
| 'thread'
| 'miniavatar'
| 'avatar'
| 'stacked'
| 'ministacked';
embedProfile?: string;
}) {
const { status, user } = useProfile(pubkey, embedProfile);
const createdAt = formatCreatedAt(time, variant === 'chat');
const svgURI =
'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50));
if (variant === 'mention') {
if (status === 'pending') {
return (
);
}
return (
{user?.name ||
user?.display_name ||
user?.displayName ||
displayNpub(pubkey, 16)}
·
{createdAt}
);
}
if (variant === 'notify') {
if (status === 'pending') {
return (
);
}
return (
{user?.name ||
user?.display_name ||
user?.displayName ||
displayNpub(pubkey, 16)}
);
}
if (variant === 'large') {
if (status === 'pending') {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName}
{user?.about || user?.bio || 'No bio'}
{user?.website ? (
{user?.website}
) : null}
);
}
if (variant === 'simple') {
if (status === 'pending') {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName}
{user?.nip05 || user?.username || displayNpub(pubkey, 16)}
);
}
if (variant === 'avatar') {
if (status === 'pending') {
return (
);
}
return (
);
}
if (variant === 'miniavatar') {
if (status === 'pending') {
return (
);
}
return (
);
}
if (variant === 'stacked') {
if (status === 'pending') {
return (
);
}
return (
);
}
if (variant === 'ministacked') {
if (status === 'pending') {
return (
);
}
return (
);
}
if (variant === 'repost') {
if (status === 'pending') {
return (
);
}
return (
{user?.name ||
user?.display_name ||
user?.displayName ||
displayNpub(pubkey, 16)}
reposted
);
}
if (variant === 'thread') {
if (status === 'pending') {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName || 'Anon'}
{createdAt}
·
{displayNpub(pubkey, 16)}
);
}
if (status === 'pending') {
return (
);
}
return (
{user?.name ||
user?.display_name ||
user?.displayName ||
displayNpub(pubkey, 16)}
{user?.name ||
user?.display_name ||
user?.displayName ||
user?.username}
{user?.nip05 ? (
) : (
{displayNpub(pubkey, 16)}
)}
View profile
Message
);
});