From 36fcb5acae4835b8181efa340056dd141ab0d075 Mon Sep 17 00:00:00 2001 From: Silberengel Date: Sun, 19 Apr 2026 10:58:54 +0200 Subject: [PATCH] fix react bug --- package-lock.json | 4 ++-- package.json | 2 +- .../FavoriteRelaysActivityProvider.tsx | 2 +- src/providers/FeedProvider.tsx | 17 ++++++++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e2ae19b..73300cce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "imwald", - "version": "23.1.1", + "version": "23.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "imwald", - "version": "23.1.1", + "version": "23.1.2", "license": "MIT", "dependencies": { "@asciidoctor/core": "^3.0.4", diff --git a/package.json b/package.json index f429c82a..af8536aa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imwald", - "version": "23.1.1", + "version": "23.1.2", "description": "Imwald — a user-friendly Nostr client focused on relay feed browsing, publications, and relay discovery", "private": true, "type": "module", diff --git a/src/providers/FavoriteRelaysActivityProvider.tsx b/src/providers/FavoriteRelaysActivityProvider.tsx index f2eff6eb..af2542e7 100644 --- a/src/providers/FavoriteRelaysActivityProvider.tsx +++ b/src/providers/FavoriteRelaysActivityProvider.tsx @@ -227,7 +227,7 @@ export function FavoriteRelaysActivityProvider({ children }: { children: React.R * Fixes race where pulse data arrives before NostrProvider has hydrated follow list from cache. */ useEffect(() => { if (!viewerPubkey || followings.length > 0) { - setFallbackFollowings([]) + setFallbackFollowings((prev) => (prev.length ? [] : prev)) return } let cancelled = false diff --git a/src/providers/FeedProvider.tsx b/src/providers/FeedProvider.tsx index 0e1db00b..67e18242 100644 --- a/src/providers/FeedProvider.tsx +++ b/src/providers/FeedProvider.tsx @@ -226,7 +226,22 @@ export function FeedProvider({ children }: { children: React.ReactNode }) { const baseRelays = getFavoritesFeedRelayUrls(favoriteRelays, blockedRelays) const finalRelays = mergeRelayUrlLayers([baseRelays, extraFeedRelayUrls], blockedRelays) logger.debug('Updating relay URLs for all-favorites:', finalRelays) - setRelayUrls(finalRelays) + // Same logical list can be merged into a new array each run; keep the previous reference so + // feed consumers (RelaysFeed → NoteList relay subscription) do not re-enter effects in a tight loop. + const nextKey = finalRelays + .map((u) => normalizeAnyRelayUrl(u) || u) + .filter(Boolean) + .sort() + .join('\n') + setRelayUrls((prev) => { + const prevKey = prev + .map((u) => normalizeAnyRelayUrl(u) || u) + .filter(Boolean) + .sort() + .join('\n') + if (prevKey === nextKey) return prev + return finalRelays + }) }, [feedInfo.feedType, favoriteRelays, blockedRelays, extraFeedRelayUrls]) return (