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 (
{user?.name || user?.display_name || user?.displayName || fallbackName}
·
{createdAt}
);
}
if (variant === 'notify') {
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName || fallbackName}
);
}
if (variant === 'large') {
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName}
{user?.about || user?.bio || 'No bio'}
);
}
if (variant === 'simple') {
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName}
{user?.nip05 || user?.username || fallbackName}
);
}
if (variant === 'avatar') {
if (isLoading) {
return (
);
}
return (
);
}
if (variant === 'miniavatar') {
if (isLoading) {
return (
);
}
return (
);
}
if (variant === 'childnote') {
if (isLoading) {
return (
<>
{fallbackName}
{subtext}:
>
);
}
return (
<>
{user?.display_name || user?.name || user?.displayName || fallbackName}{' '}
{subtext}:
>
);
}
if (variant === 'stacked') {
if (isLoading) {
return (
);
}
return (
);
}
if (variant === 'ministacked') {
if (isLoading) {
return (
);
}
return (
);
}
if (variant === 'repost') {
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName || fallbackName}
reposted
);
}
if (variant === 'thread') {
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName || 'Anon'}
{createdAt}
·
{fallbackName}
);
}
if (isLoading) {
return (
);
}
return (
{user?.name || user?.display_name || user?.displayName || fallbackName}
{user?.name ||
user?.display_name ||
user?.displayName ||
user?.username}
{user?.nip05 ? (
) : (
{fallbackName}
)}
View profile
Message
);
});