Browse Source

fix the relay feed

imwald
Silberengel 5 months ago
parent
commit
2e458f60cd
  1. 6
      src/components/NoteList/index.tsx
  2. 2
      src/components/ReplyNoteList/index.tsx
  3. 7
      src/pages/primary/NoteListPage/RelaysFeed.tsx
  4. 5
      src/services/client.service.ts

6
src/components/NoteList/index.tsx

@ -219,6 +219,12 @@ const NoteList = forwardRef(
console.log('❌ [NoteList] No subRequests, returning early') console.log('❌ [NoteList] No subRequests, returning early')
return 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() { async function init() {
console.log('🔄 [NoteList] Initializing feed...') console.log('🔄 [NoteList] Initializing feed...')

2
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) return replyEvents.sort((a, b) => b.created_at - a.created_at)
} }
}, [event.id, repliesMap, mutePubkeySet, hideContentMentioningMutedUsers, sort]) }, [event.id, repliesMap, mutePubkeySet, hideContentMentioningMutedUsers, sort])
const [timelineKey, setTimelineKey] = useState<string | undefined>(undefined) const [timelineKey] = useState<string | undefined>(undefined)
const [until, setUntil] = useState<number | undefined>(undefined) const [until, setUntil] = useState<number | undefined>(undefined)
const [loading, setLoading] = useState<boolean>(false) const [loading, setLoading] = useState<boolean>(false)
const [showCount, setShowCount] = useState(SHOW_COUNT) const [showCount, setShowCount] = useState(SHOW_COUNT)

7
src/pages/primary/NoteListPage/RelaysFeed.tsx

@ -3,7 +3,7 @@ import { checkAlgoRelay } from '@/lib/relay'
import logger from '@/lib/logger' import logger from '@/lib/logger'
import { useFeed } from '@/providers/FeedProvider' import { useFeed } from '@/providers/FeedProvider'
import relayInfoService from '@/services/relay-info.service' import relayInfoService from '@/services/relay-info.service'
import { useEffect, useState } from 'react' import { useEffect, useMemo, useState } from 'react'
export default function RelaysFeed() { export default function RelaysFeed() {
logger.debug('RelaysFeed component rendering') logger.debug('RelaysFeed component rendering')
@ -27,6 +27,9 @@ export default function RelaysFeed() {
init() init()
}, [relayUrls]) }, [relayUrls])
// Memoize subRequests before any early returns to avoid Rules of Hooks violation
const subRequests = useMemo(() => [{ urls: relayUrls, filter: {} }], [relayUrls])
if (!isReady) { if (!isReady) {
return null return null
} }
@ -34,8 +37,6 @@ export default function RelaysFeed() {
if (feedInfo.feedType !== 'relay' && feedInfo.feedType !== 'relays' && feedInfo.feedType !== 'all-favorites') { if (feedInfo.feedType !== 'relay' && feedInfo.feedType !== 'relays' && feedInfo.feedType !== 'all-favorites') {
return null return null
} }
const subRequests = [{ urls: relayUrls, filter: {} }]
console.log('[RelaysFeed] Rendering NormalFeed with:', { subRequests, relayUrls, areAlgoRelays }) console.log('[RelaysFeed] Rendering NormalFeed with:', { subRequests, relayUrls, areAlgoRelays })
return ( return (

5
src/services/client.service.ts

@ -623,6 +623,11 @@ class ClientService extends EventTarget {
} else if (eosedCount >= threshold) { } else if (eosedCount >= threshold) {
clearTimeout(globalTimeout) clearTimeout(globalTimeout)
onEvents(events, eosedCount >= requestCount) 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) => { onNew: (evt) => {

Loading…
Cancel
Save