From 65712093465ec00d8209b48ff6c411c3c75bef59 Mon Sep 17 00:00:00 2001 From: codytseng Date: Sun, 24 Nov 2024 20:53:44 +0800 Subject: [PATCH] fix: reply list loading state --- .../src/components/ReplyNoteList/index.tsx | 6 ++++-- src/renderer/src/services/client.service.ts | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/renderer/src/components/ReplyNoteList/index.tsx b/src/renderer/src/components/ReplyNoteList/index.tsx index 02ec7f9b..1a11d68a 100644 --- a/src/renderer/src/components/ReplyNoteList/index.tsx +++ b/src/renderer/src/components/ReplyNoteList/index.tsx @@ -33,10 +33,12 @@ export default function ReplyNoteList({ event, className }: { event: Event; clas try { const relayList = await client.fetchRelayList(event.pubkey) const closer = await client.subscribeReplies(relayList.read.slice(0, 5), event.id, 100, { - onReplies: (evts, until) => { + onReplies: (evts, isCache, until) => { setReplies(evts) setUntil(until) - setLoading(false) + if (!isCache) { + setLoading(false) + } }, onNew: (evt) => { setReplies((pre) => [...pre, evt]) diff --git a/src/renderer/src/services/client.service.ts b/src/renderer/src/services/client.service.ts index c580c3b4..ac574470 100644 --- a/src/renderer/src/services/client.service.ts +++ b/src/renderer/src/services/client.service.ts @@ -159,7 +159,7 @@ class ClientService { onReplies, onNew }: { - onReplies: (events: NEvent[], until?: number) => void + onReplies: (events: NEvent[], isCache: boolean, until?: number) => void onNew: (evt: NEvent) => void } ) { @@ -170,7 +170,7 @@ class ClientService { replies = (await Promise.all(cache.refs.map(([id]) => this.eventCache.get(id)))).filter( Boolean ) as NEvent[] - onReplies(replies, cache.until) + onReplies(replies, true, cache.until) } else { cache = { refs } this.repliesCache.set(parentEventId, cache) @@ -206,12 +206,21 @@ class ClientService { hasEosed = true const newReplies = events.sort((a, b) => a.created_at - b.created_at) replies = replies.concat(newReplies) - refs.push(...newReplies.map((evt) => [evt.id, evt.created_at] as [string, number])) // first fetch if (!since) { cache.until = events.length >= limit ? events[0].created_at - 1 : undefined } - onReplies(replies, cache.until) + onReplies(replies, false, cache.until) + const lastRefCreatedAt = refs.length ? refs[refs.length - 1][1] : undefined + if (lastRefCreatedAt) { + refs.push( + ...newReplies + .filter((reply) => reply.created_at > lastRefCreatedAt) + .map((evt) => [evt.id, evt.created_at] as [string, number]) + ) + } else { + refs.push(...newReplies.map((evt) => [evt.id, evt.created_at] as [string, number])) + } } } )