refactor: simplify NIP-43 renderers to follow codebase patterns

- Use PubkeyListPreview in RelayMembersRenderer feed view (shows actual
  users instead of just count, matching FollowSetRenderer pattern)
- Remove redundant icon props from detail renderers (PubkeyListFull
  has sensible defaults)
- Simplify variable naming and reduce comments
- No functional changes, just cleaner code
This commit is contained in:
Claude
2026-01-15 11:24:32 +00:00
parent c918b8a05f
commit 810d9e4c1b
2 changed files with 29 additions and 51 deletions

View File

@@ -5,29 +5,16 @@ import {
BaseEventContainer,
ClickableEventTitle,
} from "./BaseEventRenderer";
import { PubkeyListFull } from "../lists";
import { PubkeyListPreview, PubkeyListFull } from "../lists";
import type { NostrEvent } from "@/types/nostr";
/**
* Kind 13534 Renderer - Relay Members (Feed View)
* NIP-43 relay membership list
*
* Uses "member" tags instead of standard "p" tags:
* ["member", "<hex-pubkey>"]
* NIP-43 relay membership list using "member" tags
*/
export function RelayMembersRenderer({ event }: BaseEventProps) {
const members = getTagValues(event, "member");
if (members.length === 0) {
return (
<BaseEventContainer event={event}>
<div className="text-xs text-muted-foreground italic">
Empty membership list
</div>
</BaseEventContainer>
);
}
return (
<BaseEventContainer event={event}>
<div className="flex flex-col gap-2">
@@ -39,14 +26,17 @@ export function RelayMembersRenderer({ event }: BaseEventProps) {
<span>Relay Members</span>
</ClickableEventTitle>
<div className="flex flex-col gap-1.5 text-xs">
<div className="flex items-center gap-1.5">
<Users className="size-3.5 text-muted-foreground" />
<span>
{members.length} {members.length === 1 ? "member" : "members"}
</span>
{members.length === 0 ? (
<div className="text-xs text-muted-foreground italic">
Empty membership list
</div>
</div>
) : (
<PubkeyListPreview
pubkeys={members}
previewLimit={3}
label="members"
/>
)}
</div>
</BaseEventContainer>
);
@@ -66,11 +56,7 @@ export function RelayMembersDetailRenderer({ event }: { event: NostrEvent }) {
</div>
{members.length > 0 ? (
<PubkeyListFull
pubkeys={members}
label="Members"
icon={<Users className="size-5" />}
/>
<PubkeyListFull pubkeys={members} label="Members" />
) : (
<div className="text-sm text-muted-foreground italic">
Empty membership list

View File

@@ -14,13 +14,13 @@ import type { NostrEvent } from "@/types/nostr";
* NIP-43 event published when a member is added to a relay
*/
export function AddUserRenderer({ event }: BaseEventProps) {
const addedPubkey = getTagValue(event, "p");
const pubkey = getTagValue(event, "p");
if (!addedPubkey) {
if (!pubkey) {
return (
<BaseEventContainer event={event}>
<div className="text-xs text-muted-foreground italic">
Invalid add user event (missing pubkey)
Invalid event (missing pubkey)
</div>
</BaseEventContainer>
);
@@ -38,7 +38,7 @@ export function AddUserRenderer({ event }: BaseEventProps) {
</ClickableEventTitle>
<div className="text-xs">
<UserName pubkey={addedPubkey} className="text-xs" />
<UserName pubkey={pubkey} className="text-xs" />
<span className="text-muted-foreground"> added to relay</span>
</div>
</div>
@@ -47,10 +47,10 @@ export function AddUserRenderer({ event }: BaseEventProps) {
}
/**
* Kind 8000 Detail View - Full add user details
* Kind 8000 Detail View
*/
export function AddUserDetailRenderer({ event }: { event: NostrEvent }) {
const addedPubkey = getTagValue(event, "p");
const pubkey = getTagValue(event, "p");
return (
<div className="flex flex-col gap-6 p-4">
@@ -59,12 +59,8 @@ export function AddUserDetailRenderer({ event }: { event: NostrEvent }) {
<span className="text-lg font-semibold">User Added</span>
</div>
{addedPubkey ? (
<PubkeyListFull
pubkeys={[addedPubkey]}
label="Added Member"
icon={<UserPlus className="size-5" />}
/>
{pubkey ? (
<PubkeyListFull pubkeys={[pubkey]} label="Added Member" />
) : (
<div className="text-sm text-muted-foreground italic">
Invalid event (missing pubkey)
@@ -79,13 +75,13 @@ export function AddUserDetailRenderer({ event }: { event: NostrEvent }) {
* NIP-43 event published when a member is removed from a relay
*/
export function RemoveUserRenderer({ event }: BaseEventProps) {
const removedPubkey = getTagValue(event, "p");
const pubkey = getTagValue(event, "p");
if (!removedPubkey) {
if (!pubkey) {
return (
<BaseEventContainer event={event}>
<div className="text-xs text-muted-foreground italic">
Invalid remove user event (missing pubkey)
Invalid event (missing pubkey)
</div>
</BaseEventContainer>
);
@@ -103,7 +99,7 @@ export function RemoveUserRenderer({ event }: BaseEventProps) {
</ClickableEventTitle>
<div className="text-xs">
<UserName pubkey={removedPubkey} className="text-xs" />
<UserName pubkey={pubkey} className="text-xs" />
<span className="text-muted-foreground"> removed from relay</span>
</div>
</div>
@@ -112,10 +108,10 @@ export function RemoveUserRenderer({ event }: BaseEventProps) {
}
/**
* Kind 8001 Detail View - Full remove user details
* Kind 8001 Detail View
*/
export function RemoveUserDetailRenderer({ event }: { event: NostrEvent }) {
const removedPubkey = getTagValue(event, "p");
const pubkey = getTagValue(event, "p");
return (
<div className="flex flex-col gap-6 p-4">
@@ -124,12 +120,8 @@ export function RemoveUserDetailRenderer({ event }: { event: NostrEvent }) {
<span className="text-lg font-semibold">User Removed</span>
</div>
{removedPubkey ? (
<PubkeyListFull
pubkeys={[removedPubkey]}
label="Removed Member"
icon={<UserMinus className="size-5" />}
/>
{pubkey ? (
<PubkeyListFull pubkeys={[pubkey]} label="Removed Member" />
) : (
<div className="text-sm text-muted-foreground italic">
Invalid event (missing pubkey)