diff --git a/web-marketplace/src/lib/ecocredit/api.ts b/web-marketplace/src/lib/ecocredit/api.ts index bd223d6e35..53e37de13b 100644 --- a/web-marketplace/src/lib/ecocredit/api.ts +++ b/web-marketplace/src/lib/ecocredit/api.ts @@ -8,7 +8,9 @@ import { QueryClientImpl as DataQueryClientImpl } from '@regen-network/api/lib/g import { BatchBalanceInfo, BatchInfo, + ClassInfo, DeepPartial, + ProjectInfo, QueryBalanceRequest, QueryBalanceResponse, QueryBalancesRequest, @@ -421,7 +423,19 @@ export const queryProjectsByClass = async ({ request, }: QueryProjectsByClassProps): Promise => { try { - return client.ProjectsByClass({ classId: request.classId }); + let projects: ProjectInfo[] = []; + let response: QueryProjectsByClassResponse | undefined; + while (!response || response.pagination?.nextKey?.length) { + if (response?.pagination?.nextKey?.length) { + request.pagination = { key: response.pagination.nextKey }; + } + response = await client.ProjectsByClass(request); + projects.push(...response.projects); + } + return { + $type: response.$type, + projects, + }; } catch (err) { throw new Error(`Error fetching projects by class: ${err}`); } @@ -772,7 +786,19 @@ export const queryClasses = async ({ request, }: QueryClassesProps): Promise => { try { - return await client.Classes(request); + let classes: ClassInfo[] = []; + let response: QueryClassesResponse | undefined; + while (!response || response.pagination?.nextKey?.length) { + if (response?.pagination?.nextKey?.length) { + request.pagination = { key: response.pagination.nextKey }; + } + response = await client.Classes(request); + classes.push(...response.classes); + } + return { + $type: response.$type, + classes, + }; } catch (err) { throw new Error( `Error in the Classes query of the ledger ecocredit module: ${err}`, @@ -810,7 +836,19 @@ export const queryProjects = async ({ request, }: QueryProjectsProps): Promise => { try { - return await client.Projects(request); + let projects: ProjectInfo[] = []; + let response: QueryProjectsResponse | undefined; + while (!response || response.pagination?.nextKey?.length) { + if (response?.pagination?.nextKey?.length) { + request.pagination = { key: response.pagination.nextKey }; + } + response = await client.Projects(request); + projects.push(...response.projects); + } + return { + $type: response.$type, + projects, + }; } catch (err) { throw new Error( `Error in the Projects query of the ledger ecocredit module: ${err}`, @@ -829,7 +867,19 @@ export const queryProjectsByAdmin = async ({ request, }: QueryProjectsByAdminProps): Promise => { try { - return await client.ProjectsByAdmin(request); + let projects: ProjectInfo[] = []; + let response: QueryProjectsByAdminResponse | undefined; + while (!response || response.pagination?.nextKey?.length) { + if (response?.pagination?.nextKey?.length) { + request.pagination = { key: response.pagination.nextKey }; + } + response = await client.ProjectsByAdmin(request); + projects.push(...response.projects); + } + return { + $type: response.$type, + projects, + }; } catch (err) { throw new Error( `Error in the ProjectsByAdmin query of the ledger ecocredit module: ${err}`, diff --git a/web-marketplace/src/lib/queries/react-query/ecocredit/getClassesQuery/getClassesQuery.ts b/web-marketplace/src/lib/queries/react-query/ecocredit/getClassesQuery/getClassesQuery.ts index fc9b0408bc..294c717470 100644 --- a/web-marketplace/src/lib/queries/react-query/ecocredit/getClassesQuery/getClassesQuery.ts +++ b/web-marketplace/src/lib/queries/react-query/ecocredit/getClassesQuery/getClassesQuery.ts @@ -1,3 +1,4 @@ +import { queryClasses } from 'lib/ecocredit/api'; import { CLASSES_KEY } from './getClassesQuery.constants'; import { ReactQueryClassesProps, @@ -12,7 +13,7 @@ export const getClassesQuery = ({ queryKey: [CLASSES_KEY], queryFn: async () => { if (!client) return null; - return await client.Classes(request); + return await queryClasses({ client, request }); }, ...params, });