diff --git a/src/pages/primary/DiscussionsPage/ThreadCard.tsx b/src/pages/primary/DiscussionsPage/ThreadCard.tsx
index 66ea58b..db56b59 100644
--- a/src/pages/primary/DiscussionsPage/ThreadCard.tsx
+++ b/src/pages/primary/DiscussionsPage/ThreadCard.tsx
@@ -64,6 +64,9 @@ export default function ThreadCard({ thread, onThreadClick, className }: ThreadC
if (relaySource === 'multiple') {
return t('Multiple Relays')
}
+ if (relaySource === 'unknown') {
+ return t('Unknown Relay')
+ }
return relaySource.replace('wss://', '').replace('ws://', '')
}
diff --git a/src/pages/primary/DiscussionsPage/index.tsx b/src/pages/primary/DiscussionsPage/index.tsx
index 6f7068c..9fe2724 100644
--- a/src/pages/primary/DiscussionsPage/index.tsx
+++ b/src/pages/primary/DiscussionsPage/index.tsx
@@ -1,5 +1,6 @@
import { Button } from '@/components/ui/button'
import { Card, CardContent } from '@/components/ui/card'
+import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'
import { DEFAULT_FAVORITE_RELAYS, FAST_READ_RELAY_URLS } from '@/constants'
import { useFavoriteRelays } from '@/providers/FavoriteRelaysProvider'
import { useNostr } from '@/providers/NostrProvider'
@@ -21,7 +22,7 @@ import { kinds } from 'nostr-tools'
const DiscussionsPage = forwardRef((_, ref) => {
const { t } = useTranslation()
- const { favoriteRelays } = useFavoriteRelays()
+ const { favoriteRelays, relaySets } = useFavoriteRelays()
const { pubkey } = useNostr()
const { push } = useSecondaryPage()
const [selectedTopic, setSelectedTopic] = useState('all')
@@ -49,10 +50,18 @@ const DiscussionsPage = forwardRef((_, ref) => {
// Memoize relay URLs with deduplication
const relayUrls = useMemo(() => {
- if (selectedRelay) return [selectedRelay]
+ if (selectedRelay) {
+ // Check if it's a relay set
+ const relaySet = relaySets.find(set => set.id === selectedRelay)
+ if (relaySet) {
+ return relaySet.relayUrls
+ }
+ // It's an individual relay
+ return [selectedRelay]
+ }
// Deduplicate and combine relays
return Array.from(new Set([...availableRelays, ...FAST_READ_RELAY_URLS]))
- }, [selectedRelay, availableRelays])
+ }, [selectedRelay, availableRelays, relaySets])
// Available topic IDs for matching
const availableTopicIds = useMemo(() =>
@@ -123,10 +132,16 @@ const DiscussionsPage = forwardRef((_, ref) => {
const titleTag = event.tags.find(tag => tag[0] === 'title' && tag[1])
return titleTag && event.content.trim().length > 0
})
- .map(event => ({
- ...event,
- _relaySource: selectedRelay || 'multiple'
- }))
+ .map(event => {
+ // Get the relay where this event was actually found
+ const eventHints = client.getEventHints(event.id)
+ const relaySource = eventHints.length > 0 ? eventHints[0] : 'unknown'
+
+ return {
+ ...event,
+ _relaySource: relaySource
+ }
+ })
setAllThreads(validThreads)
} catch (error) {
@@ -440,19 +455,41 @@ const DiscussionsPage = forwardRef((_, ref) => {
threads={viewMode === 'grouped' && selectedTopic === 'all' ? allThreads : threads}
replies={[]}
/>
- {availableRelays.length > 1 && (
-
+ {(availableRelays.length > 1 || relaySets.length > 0) && (
+