fix: prevent race conditions between content loaders

Add coordination logic to ensure only one content loader (article/external/event)
runs at a time. This prevents state conflicts that caused 'No readable content found'
errors and stale content from previous articles appearing.

The existing instant-load + background-refresh flow is preserved.
This commit is contained in:
Gigi
2025-10-25 00:45:13 +02:00
parent 183463c817
commit 36b35367f1

View File

@@ -226,9 +226,15 @@ const Bookmarks: React.FC<BookmarksProps> = ({
settings settings
}) })
// Determine which loader should be active based on route
// Only one loader should run at a time to prevent state conflicts
const shouldLoadArticle = !!naddr && !externalUrl && !eventId
const shouldLoadExternal = !!externalUrl && !naddr && !eventId
const shouldLoadEvent = !!eventId && !naddr && !externalUrl
// Load nostr-native article if naddr is in URL // Load nostr-native article if naddr is in URL
useArticleLoader({ useArticleLoader({
naddr, naddr: shouldLoadArticle ? naddr : undefined,
relayPool, relayPool,
eventStore, eventStore,
setSelectedUrl, setSelectedUrl,
@@ -245,7 +251,7 @@ const Bookmarks: React.FC<BookmarksProps> = ({
// Load external URL if /r/* route is used // Load external URL if /r/* route is used
useExternalUrlLoader({ useExternalUrlLoader({
url: externalUrl, url: shouldLoadExternal ? externalUrl : undefined,
relayPool, relayPool,
eventStore, eventStore,
setSelectedUrl, setSelectedUrl,
@@ -260,7 +266,7 @@ const Bookmarks: React.FC<BookmarksProps> = ({
// Load event if /e/:eventId route is used // Load event if /e/:eventId route is used
useEventLoader({ useEventLoader({
eventId, eventId: shouldLoadEvent ? eventId : undefined,
relayPool, relayPool,
eventStore, eventStore,
setSelectedUrl, setSelectedUrl,