From 71b0b0fa42dc3dd2c742956735b97f5b0e56841c Mon Sep 17 00:00:00 2001 From: plebeius Date: Sun, 8 Mar 2026 17:36:55 +0800 Subject: [PATCH] perf(popular-threads): show board-count loading state for popular threads --- src/hooks/__tests__/use-state-string.test.tsx | 8 ++++++++ src/hooks/use-state-string.ts | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hooks/__tests__/use-state-string.test.tsx b/src/hooks/__tests__/use-state-string.test.tsx index 812891cf..732d552b 100644 --- a/src/hooks/__tests__/use-state-string.test.tsx +++ b/src/hooks/__tests__/use-state-string.test.tsx @@ -139,4 +139,12 @@ describe('use-state-string', () => { expect(latestValue).toBe('Resolving 2 addresses from ens.example.com, downloading 2 boards, 1 threads, 1 page from gateway.example.com, ipfs.io'); }); + + it('shows an immediate board-specific loading string before detailed multi-board states arrive', () => { + act(() => { + root.render(createElement(FeedStateStringHarness, { addresses: ['music-posting.eth', 'tech-posting.eth'] })); + }); + + expect(latestValue).toBe('Downloading 2 boards'); + }); }); diff --git a/src/hooks/use-state-string.ts b/src/hooks/use-state-string.ts index 4a770c5c..fe3571e2 100644 --- a/src/hooks/use-state-string.ts +++ b/src/hooks/use-state-string.ts @@ -157,12 +157,16 @@ export const useFeedStateString = (subplebbitAddresses?: string[]): string | und } } + if (!stateString && subplebbitAddresses?.length) { + stateString = `downloading ${subplebbitAddresses.length} boards`; + } + // capitalize first letter stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1); // if string is empty, return undefined instead return stateString === '' ? undefined : stateString; - }, [states, subplebbitAddress]); + }, [states, subplebbitAddress, subplebbitAddresses]); if (singleSubplebbitFeedStateString) { return singleSubplebbitFeedStateString;