From 3db40fb140260a9c63cee07b3f1e22b552c250d8 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Jan 2026 11:02:58 +0000 Subject: [PATCH] fix: Show accurate deduplicated relay count in dropdown --- src/components/chat/RelaysDropdown.tsx | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/components/chat/RelaysDropdown.tsx b/src/components/chat/RelaysDropdown.tsx index de1a70b..9889aee 100644 --- a/src/components/chat/RelaysDropdown.tsx +++ b/src/components/chat/RelaysDropdown.tsx @@ -41,6 +41,11 @@ export function RelaysDropdown({ conversation }: RelaysDropdownProps) { ? [conversation.metadata.relayUrl] : []; + // For NIP-17, compute all unique relays across all participants + const allUniqueRelays = hasParticipantRelays + ? [...new Set(Object.values(participantInboxRelays).flat())] + : relays; + // Get label for the relays section const relayLabel = conversation.protocol === "nip-17" ? "Inbox Relays" : "Relays"; @@ -62,13 +67,14 @@ export function RelaysDropdown({ conversation }: RelaysDropdownProps) { }; }; - // Pre-compute relay data for all relays - const relayData = relays.map(getRelayInfo); + // Pre-compute relay data for all unique relays (for count display) + const allRelayData = allUniqueRelays.map(getRelayInfo); - // Count connected relays - const connectedCount = relayData.filter((r) => r.isConnected).length; + // Count connected relays from the unique set + const connectedCount = allRelayData.filter((r) => r.isConnected).length; + const totalCount = allUniqueRelays.length; - if (relays.length === 0 && !hasParticipantRelays) { + if (totalCount === 0) { return null; // Don't show if no relays } @@ -78,7 +84,7 @@ export function RelaysDropdown({ conversation }: RelaysDropdownProps) { @@ -125,10 +131,10 @@ export function RelaysDropdown({ conversation }: RelaysDropdownProps) { ) : ( <>
- {relayLabel} ({relays.length}) + {relayLabel} ({totalCount})
- {relayData.map(({ url, state }) => { + {allRelayData.map(({ url, state }) => { const connIcon = getConnectionIcon(state); const authIcon = getAuthIcon(state);