mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-06-06 02:31:13 +02:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user