Make repost rows in InteractionsModal link to the repost event

Replace UserRow (profile link) with RepostRow (nevent link) in the
reposts tab so clicking a repost navigates to the repost event detail
view, matching the existing behavior for reactions.
This commit is contained in:
Alex Gleason
2026-03-25 19:13:38 -05:00
parent d09629c100
commit 62c026a9a3
+39 -38
View File
@@ -132,7 +132,7 @@ function RepostsTab({ reposts }: { reposts: RepostEntry[] }) {
return (
<div className="divide-y divide-border">
{reposts.map((repost, i) => (
<UserRow key={`${repost.pubkey}-${i}`} pubkey={repost.pubkey} subtitle={timeAgo(repost.createdAt)} />
<RepostRow key={`${repost.pubkey}-${i}`} entry={repost} />
))}
</div>
);
@@ -231,6 +231,44 @@ function ZapsTab({ zaps }: { zaps: ZapEntry[] }) {
/* ──── Shared Row Components ──── */
function RepostRow({ entry }: { entry: RepostEntry }) {
const author = useAuthor(entry.pubkey);
const metadata = author.data?.metadata;
const avatarShape = getAvatarShape(metadata);
const displayName = metadata?.name || genUserName(entry.pubkey);
const nevent = useMemo(() => nip19.neventEncode({ id: entry.eventId, author: entry.pubkey }), [entry.eventId, entry.pubkey]);
return (
<Link
to={`/${nevent}`}
className="flex items-center gap-3 px-4 py-3 hover:bg-secondary/30 transition-colors"
>
<Avatar shape={avatarShape} className="size-10 shrink-0">
<AvatarImage src={metadata?.picture} alt={displayName} />
<AvatarFallback className="bg-primary/20 text-primary text-sm">
{displayName[0].toUpperCase()}
</AvatarFallback>
</Avatar>
<div className="flex-1 min-w-0">
<div className="flex items-center gap-1.5">
<span className="font-bold text-sm truncate">
{author.data?.event ? (
<EmojifiedText tags={author.data.event.tags}>{displayName}</EmojifiedText>
) : displayName}
</span>
{metadata?.nip05 && (
<VerifiedNip05Text nip05={metadata.nip05} pubkey={entry.pubkey} className="text-xs text-muted-foreground truncate" />
)}
</div>
<span className="text-xs text-muted-foreground">{timeAgo(entry.createdAt)}</span>
</div>
<ChevronRight className="size-4 text-muted-foreground shrink-0" />
</Link>
);
}
function ReactionRow({ entry }: { entry: ReactionEntry }) {
const author = useAuthor(entry.pubkey);
const metadata = author.data?.metadata;
@@ -269,43 +307,6 @@ function ReactionRow({ entry }: { entry: ReactionEntry }) {
);
}
function UserRow({ pubkey, subtitle }: { pubkey: string; subtitle?: string }) {
const author = useAuthor(pubkey);
const metadata = author.data?.metadata;
const avatarShape = getAvatarShape(metadata);
const displayName = metadata?.name || genUserName(pubkey);
const npub = useMemo(() => nip19.npubEncode(pubkey), [pubkey]);
return (
<Link
to={`/${npub}`}
className="flex items-center gap-3 px-4 py-3 hover:bg-secondary/30 transition-colors"
>
<Avatar shape={avatarShape} className="size-10 shrink-0">
<AvatarImage src={metadata?.picture} alt={displayName} />
<AvatarFallback className="bg-primary/20 text-primary text-sm">
{displayName[0].toUpperCase()}
</AvatarFallback>
</Avatar>
<div className="flex-1 min-w-0">
<div className="flex items-center gap-1.5">
<span className="font-bold text-sm truncate">
{author.data?.event ? (
<EmojifiedText tags={author.data.event.tags}>{displayName}</EmojifiedText>
) : displayName}
</span>
{metadata?.nip05 && (
<VerifiedNip05Text nip05={metadata.nip05} pubkey={pubkey} className="text-xs text-muted-foreground truncate" />
)}
</div>
{subtitle && (
<span className="text-xs text-muted-foreground">{subtitle}</span>
)}
</div>
</Link>
);
}
function ZapRow({ zap }: { zap: ZapEntry }) {
const author = useAuthor(zap.senderPubkey);