From d6aa18c063787eb779f284246c5bf2c3b52e8ce6 Mon Sep 17 00:00:00 2001 From: Maurice Date: Tue, 14 Apr 2026 20:37:25 +0200 Subject: [PATCH] Fix pagination error handling and album scroll leak in provider picker (#644) - Stop pagination on fetch error (set hasMore=false on non-ok response or catch) - Set hasMore=false when loading album photos (albums load all at once) - Hide ScrollTrigger when viewing album photos to prevent timeline photo leak --- client/src/pages/JourneyDetailPage.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/pages/JourneyDetailPage.tsx b/client/src/pages/JourneyDetailPage.tsx index 87319525..709fd6a4 100644 --- a/client/src/pages/JourneyDetailPage.tsx +++ b/client/src/pages/JourneyDetailPage.tsx @@ -1486,8 +1486,12 @@ function ProviderPicker({ provider, userId, entries, trips, existingAssetIds, on const assets = data.assets || [] setPhotos(prev => append ? [...prev, ...assets] : assets) setHasMore(!!data.hasMore) + } else { + setHasMore(false) } - } catch (e: any) { if (e.name !== 'AbortError') {} } + } catch (e: any) { + if (e.name !== 'AbortError') setHasMore(false) + } if (!signal.aborted) { setLoading(false); setLoadingMore(false) } } @@ -1500,6 +1504,7 @@ function ProviderPicker({ provider, userId, entries, trips, existingAssetIds, on const signal = cancelPending() setLoading(true) setPhotos([]) + setHasMore(false) try { const res = await fetch(`/api/integrations/memories/${provider}/albums/${albumId}/photos`, { credentials: 'include', signal }) if (res.ok) setPhotos((await res.json()).assets || []) @@ -1773,7 +1778,7 @@ function ProviderPicker({ provider, userId, entries, trips, existingAssetIds, on ) })} {/* Infinite scroll trigger */} - {hasMore && } + {hasMore && !selectedAlbum && } )}