diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index 3cafcb7168..77035f3e24 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -59,7 +59,6 @@ export function useNotificationFeedQuery(opts?: { const moderationOpts = useModerationOpts() const unreads = useUnreadNotificationsApi() const enabled = opts?.enabled !== false - const lastPageCountRef = useRef(0) const gate = useGate() // false: force showing all notifications @@ -121,29 +120,21 @@ export function useNotificationFeedQuery(opts?: { }, }) + const lastItemsCountRef = useRef(0) useEffect(() => { const {isFetching, hasNextPage, data} = query if (isFetching || !hasNextPage) { return } - - // avoid double-fires of fetchNextPage() - if ( - lastPageCountRef.current !== 0 && - lastPageCountRef.current === data?.pages?.length - ) { - return - } - - // fetch next page if we haven't gotten a full page of content let count = 0 for (const page of data?.pages || []) { count += page.items.length } - if (count < PAGE_SIZE && (data?.pages.length || 0) < 6) { - query.fetchNextPage() - lastPageCountRef.current = data?.pages?.length || 0 + if (count > lastItemsCountRef.current) { + lastItemsCountRef.current = count + return } + query.fetchNextPage() }, [query]) return query diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 569c85c3ad..520d870d62 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -134,7 +134,6 @@ export function usePostFeedQuery( args: typeof selectArgs result: InfiniteData } | null>(null) - const lastPageCountRef = useRef(0) const isDiscover = feedDesc.includes(DISCOVER_FEED_URI) // Make sure this doesn't invalidate unless really needed. @@ -376,31 +375,23 @@ export function usePostFeedQuery( ), }) + const lastItemsCountRef = useRef(0) useEffect(() => { const {isFetching, hasNextPage, data} = query if (isFetching || !hasNextPage) { return } - - // avoid double-fires of fetchNextPage() - if ( - lastPageCountRef.current !== 0 && - lastPageCountRef.current === data?.pages?.length - ) { - return - } - - // fetch next page if we haven't gotten a full page of content let count = 0 for (const page of data?.pages || []) { for (const slice of page.slices) { count += slice.items.length } } - if (count < PAGE_SIZE && (data?.pages.length || 0) < 6) { - query.fetchNextPage() - lastPageCountRef.current = data?.pages?.length || 0 + if (count > lastItemsCountRef.current) { + lastItemsCountRef.current = count + return } + query.fetchNextPage() }, [query]) return query