From 2e458f60cd5aa4d764d2fc4af8234eeadfebd32c Mon Sep 17 00:00:00 2001 From: Silberengel Date: Mon, 27 Oct 2025 22:53:39 +0100 Subject: [PATCH] fix the relay feed --- src/components/NoteList/index.tsx | 6 ++++++ src/components/ReplyNoteList/index.tsx | 2 +- src/pages/primary/NoteListPage/RelaysFeed.tsx | 7 ++++--- src/services/client.service.ts | 5 +++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/NoteList/index.tsx b/src/components/NoteList/index.tsx index 141de35..2633076 100644 --- a/src/components/NoteList/index.tsx +++ b/src/components/NoteList/index.tsx @@ -219,6 +219,12 @@ const NoteList = forwardRef( console.log('❌ [NoteList] No subRequests, returning early') return } + + // Don't initialize if showKinds is empty (still loading from provider) + if (showKinds.length === 0) { + console.log('⏳ [NoteList] showKinds is empty, waiting for provider to initialize') + return + } async function init() { console.log('🔄 [NoteList] Initializing feed...') diff --git a/src/components/ReplyNoteList/index.tsx b/src/components/ReplyNoteList/index.tsx index e5b31d5..472d235 100644 --- a/src/components/ReplyNoteList/index.tsx +++ b/src/components/ReplyNoteList/index.tsx @@ -175,7 +175,7 @@ function ReplyNoteList({ index, event, sort = 'oldest' }: { index?: number; even return replyEvents.sort((a, b) => b.created_at - a.created_at) } }, [event.id, repliesMap, mutePubkeySet, hideContentMentioningMutedUsers, sort]) - const [timelineKey, setTimelineKey] = useState(undefined) + const [timelineKey] = useState(undefined) const [until, setUntil] = useState(undefined) const [loading, setLoading] = useState(false) const [showCount, setShowCount] = useState(SHOW_COUNT) diff --git a/src/pages/primary/NoteListPage/RelaysFeed.tsx b/src/pages/primary/NoteListPage/RelaysFeed.tsx index 87de23b..559f934 100644 --- a/src/pages/primary/NoteListPage/RelaysFeed.tsx +++ b/src/pages/primary/NoteListPage/RelaysFeed.tsx @@ -3,7 +3,7 @@ import { checkAlgoRelay } from '@/lib/relay' import logger from '@/lib/logger' import { useFeed } from '@/providers/FeedProvider' import relayInfoService from '@/services/relay-info.service' -import { useEffect, useState } from 'react' +import { useEffect, useMemo, useState } from 'react' export default function RelaysFeed() { logger.debug('RelaysFeed component rendering') @@ -27,6 +27,9 @@ export default function RelaysFeed() { init() }, [relayUrls]) + // Memoize subRequests before any early returns to avoid Rules of Hooks violation + const subRequests = useMemo(() => [{ urls: relayUrls, filter: {} }], [relayUrls]) + if (!isReady) { return null } @@ -34,8 +37,6 @@ export default function RelaysFeed() { if (feedInfo.feedType !== 'relay' && feedInfo.feedType !== 'relays' && feedInfo.feedType !== 'all-favorites') { return null } - - const subRequests = [{ urls: relayUrls, filter: {} }] console.log('[RelaysFeed] Rendering NormalFeed with:', { subRequests, relayUrls, areAlgoRelays }) return ( diff --git a/src/services/client.service.ts b/src/services/client.service.ts index 4faf96c..a60580c 100644 --- a/src/services/client.service.ts +++ b/src/services/client.service.ts @@ -623,6 +623,11 @@ class ClientService extends EventTarget { } else if (eosedCount >= threshold) { clearTimeout(globalTimeout) onEvents(events, eosedCount >= requestCount) + } else if (eosedCount >= requestCount && !hasCalledOnEvents) { + // All relays have finished but no events received - call onEvents to stop loading + hasCalledOnEvents = true + clearTimeout(globalTimeout) + onEvents(events, true) } }, onNew: (evt) => {