import { useProfile } from "@lume/ark";
import { RepostIcon } from "@lume/icons";
import { displayNpub, formatCreatedAt } from "@lume/utils";
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 { NIP05 } from "./nip05";
export const User = memo(function User({
pubkey,
time,
variant = "default",
subtext,
}: {
pubkey: string;
time?: number;
variant?:
| "default"
| "simple"
| "mention"
| "notify"
| "repost"
| "chat"
| "large"
| "thread"
| "miniavatar"
| "avatar"
| "stacked"
| "ministacked"
| "childnote";
subtext?: string;
}) {
const { isLoading, user } = useProfile(pubkey);
const createdAt = useMemo(
() => formatCreatedAt(time, variant === "chat"),
[time, variant],
);
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
);
});