From 788246b18712750486c517452fd78bf695979fe2 Mon Sep 17 00:00:00 2001 From: Abbey Campbell Date: Mon, 15 Dec 2025 14:20:08 -0800 Subject: [PATCH 1/5] stop making requests for projects if lastPage did not reach per_page limit --- .../Projects/hooks/useInfiniteProjectsScroll.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts index d96534c54..339de0d63 100644 --- a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts +++ b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts @@ -45,12 +45,18 @@ const useInfiniteProjectsScroll = ( { params: newInputParams, enabled }: object } return searchProjects( params, optsWithAuth ); }, + // TO DO: we need to properly type queryOptions in useAuthenticatedInfiniteQuery + /* eslint-disable consistent-return */ { - getNextPageParam: lastPage => ( lastPage - ? lastPage.page + 1 - : 1 ), + getNextPageParam: lastPage => { + if ( !lastPage || lastPage.results.length < 20 ) { + return undefined; + } + return lastPage.page + 1; + }, enabled } + /* eslint-enable consistent-return */ ); const pages = data?.pages; From 23661e750658742d040ea0c13dff43769b0dc33b Mon Sep 17 00:00:00 2001 From: Abbey Campbell Date: Mon, 15 Dec 2025 14:34:26 -0800 Subject: [PATCH 2/5] no additional fetches needed when on featured tab --- src/components/Projects/ProjectsContainer.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/Projects/ProjectsContainer.tsx b/src/components/Projects/ProjectsContainer.tsx index 46d9237b8..bc1e36ba5 100644 --- a/src/components/Projects/ProjectsContainer.tsx +++ b/src/components/Projects/ProjectsContainer.tsx @@ -1,5 +1,5 @@ import _ from "lodash"; -import React, { useState } from "react"; +import React, { useCallback, useState } from "react"; import { useCurrentUser, useLocationPermission, @@ -93,11 +93,17 @@ const ProjectsContainer = ( ) => { tabs.shift( ); } + const handleFetchNextPage = useCallback( () => { + if ( currentTabId !== TAB_ID.FEATURED ) { + fetchNextPage(); + } + }, [currentTabId, fetchNextPage] ); + return ( <> Date: Mon, 15 Dec 2025 14:39:11 -0800 Subject: [PATCH 3/5] add loading indicator for inital projects fetch --- src/components/Projects/Projects.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/Projects/Projects.tsx b/src/components/Projects/Projects.tsx index 531525424..b5a9e041f 100644 --- a/src/components/Projects/Projects.tsx +++ b/src/components/Projects/Projects.tsx @@ -140,6 +140,11 @@ const Projects = ( { ); } + + if ( isLoading && projects.length === 0 ) { + return ; + } + return ( Date: Tue, 16 Dec 2025 13:13:43 -0800 Subject: [PATCH 4/5] use constant for per_page param --- src/components/Projects/hooks/useInfiniteProjectsScroll.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts index 339de0d63..aeb812fc7 100644 --- a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts +++ b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts @@ -4,10 +4,12 @@ import { useAuthenticatedInfiniteQuery } from "sharedHooks"; +const ITEMS_PER_PAGE = 20; + const useInfiniteProjectsScroll = ( { params: newInputParams, enabled }: object ): object => { const baseParams = { ...newInputParams, - per_page: 20, + per_page: ITEMS_PER_PAGE, ttl: -1, rule_details: true, fields: { @@ -49,7 +51,7 @@ const useInfiniteProjectsScroll = ( { params: newInputParams, enabled }: object /* eslint-disable consistent-return */ { getNextPageParam: lastPage => { - if ( !lastPage || lastPage.results.length < 20 ) { + if ( !lastPage || lastPage.results.length < ITEMS_PER_PAGE ) { return undefined; } return lastPage.page + 1; From 6737ccf2a5db0d0e8234f3d8d8201135de1f36ab Mon Sep 17 00:00:00 2001 From: Abbey Campbell Date: Tue, 16 Dec 2025 13:15:14 -0800 Subject: [PATCH 5/5] use total_results for return condition --- .../Projects/hooks/useInfiniteProjectsScroll.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts index aeb812fc7..461940e8c 100644 --- a/src/components/Projects/hooks/useInfiniteProjectsScroll.ts +++ b/src/components/Projects/hooks/useInfiniteProjectsScroll.ts @@ -51,10 +51,12 @@ const useInfiniteProjectsScroll = ( { params: newInputParams, enabled }: object /* eslint-disable consistent-return */ { getNextPageParam: lastPage => { - if ( !lastPage || lastPage.results.length < ITEMS_PER_PAGE ) { - return undefined; - } - return lastPage.page + 1; + if ( !lastPage ) return undefined; + const totalProjectCount = lastPage.total_results; + const totalFetchedCount = lastPage.page * ITEMS_PER_PAGE; + return totalFetchedCount < totalProjectCount + ? lastPage.page + 1 + : undefined; }, enabled }