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 (
{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
); });