Skip to content

Commit 4df2ca8

Browse files
committed
Nest {queryArg, pageParam} for infinite queries
1 parent dbce780 commit 4df2ca8

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed

packages/toolkit/src/query/core/buildThunks.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import type {
2020
EndpointDefinition,
2121
EndpointDefinitions,
2222
InfiniteQueryArgFrom,
23+
InfiniteQueryCombinedArg,
2324
InfiniteQueryDefinition,
2425
MutationDefinition,
2526
PageParamFrom,
@@ -464,7 +465,7 @@ export function buildThunks<
464465
transformFieldName: 'transformResponse' | 'transformErrorResponse',
465466
): TransformCallback => {
466467
return endpointDefinition.query && endpointDefinition[transformFieldName]
467-
? endpointDefinition[transformFieldName]!
468+
? (endpointDefinition[transformFieldName]! as TransformCallback)
468469
: defaultTransformResponse
469470
}
470471

@@ -523,7 +524,12 @@ export function buildThunks<
523524
return Promise.resolve({ data })
524525
}
525526

526-
const pageResponse = await executeRequest(param)
527+
const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {
528+
queryArg: arg.originalArgs,
529+
pageParam: param,
530+
}
531+
532+
const pageResponse = await executeRequest(finalQueryArg)
527533

528534
const addTo = previous ? addToStart : addToEnd
529535

@@ -548,13 +554,13 @@ export function buildThunks<
548554
result = forceQueryFn()
549555
} else if (endpointDefinition.query) {
550556
result = await baseQuery(
551-
endpointDefinition.query(finalQueryArg),
557+
endpointDefinition.query(finalQueryArg as any),
552558
baseQueryApi,
553559
extraOptions as any,
554560
)
555561
} else {
556562
result = await endpointDefinition.queryFn(
557-
finalQueryArg,
563+
finalQueryArg as any,
558564
baseQueryApi,
559565
extraOptions as any,
560566
(arg) => baseQuery(arg, baseQueryApi, extraOptions as any),

packages/toolkit/src/query/endpointDefinitions.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ export interface InfiniteQueryExtraOptions<
643643
return firstPageParam > 0 ? firstPageParam - 1 : undefined
644644
},
645645
},
646-
query(pageParam) {
646+
query({pageParam}) {
647647
return `https://example.com/listItems?page=${pageParam}`
648648
},
649649
}),
@@ -737,7 +737,11 @@ export type InfiniteQueryDefinition<
737737
ReducerPath extends string = string,
738738
> =
739739
// Intentionally use `PageParam` as the `QueryArg` type
740-
BaseEndpointDefinition<PageParam, BaseQuery, ResultType> &
740+
BaseEndpointDefinition<
741+
InfiniteQueryCombinedArg<QueryArg, PageParam>,
742+
BaseQuery,
743+
ResultType
744+
> &
741745
InfiniteQueryExtraOptions<
742746
TagTypes,
743747
ResultType,
@@ -1071,6 +1075,11 @@ export type PageParamFrom<
10711075
> =
10721076
D extends InfiniteQueryDefinition<any, infer PP, any, any, any> ? PP : unknown
10731077

1078+
export type InfiniteQueryCombinedArg<QueryArg, PageParam> = {
1079+
queryArg: QueryArg
1080+
pageParam: PageParam
1081+
}
1082+
10741083
export type TagTypesFromApi<T> =
10751084
T extends Api<any, any, any, infer TagTypes> ? TagTypes : never
10761085

packages/toolkit/src/query/tests/buildHooks.test.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,7 +1710,7 @@ describe('hooks tests', () => {
17101710
return firstPageParam > 0 ? firstPageParam - 1 : undefined
17111711
},
17121712
},
1713-
query(pageParam) {
1713+
query({ pageParam }) {
17141714
return `https://example.com/listItems?page=${pageParam}`
17151715
},
17161716
}),
@@ -1738,7 +1738,7 @@ describe('hooks tests', () => {
17381738
return firstPageParam > 0 ? firstPageParam - 1 : undefined
17391739
},
17401740
},
1741-
query(pageParam) {
1741+
query({ pageParam }) {
17421742
return `https://example.com/listItems?page=${pageParam}`
17431743
},
17441744
}),
@@ -2035,7 +2035,8 @@ describe('hooks tests', () => {
20352035
}
20362036
},
20372037
},
2038-
query: ({ offset, limit }) => {
2038+
query: ({ pageParam }) => {
2039+
const { offset, limit } = pageParam
20392040
return {
20402041
url: `https://example.com/api/projectsLimitOffset?offset=${offset}&limit=${limit}`,
20412042
method: 'GET',

packages/toolkit/src/query/tests/infiniteQueries.test-d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ describe('Infinite queries', () => {
3636
return lastPageParam + 1
3737
},
3838
},
39-
query(pageParam) {
39+
query({ pageParam, queryArg }) {
4040
expectTypeOf(pageParam).toBeNumber()
41+
expectTypeOf(queryArg).toBeString()
4142

4243
return `https://example.com/listItems?page=${pageParam}`
4344
},

packages/toolkit/src/query/tests/infiniteQueries.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ describe('Infinite queries', () => {
5959
return firstPageParam > 0 ? firstPageParam - 1 : undefined
6060
},
6161
},
62-
query(pageParam) {
62+
query({ pageParam }) {
6363
return `https://example.com/listItems?page=${pageParam}`
6464
},
6565
}),
@@ -83,7 +83,7 @@ describe('Infinite queries', () => {
8383
return firstPageParam > 0 ? firstPageParam - 1 : undefined
8484
},
8585
},
86-
query(pageParam) {
86+
query({ pageParam }) {
8787
return `https://example.com/listItems?page=${pageParam}`
8888
},
8989
},
@@ -110,10 +110,10 @@ describe('Infinite queries', () => {
110110
tagTypes: ['Counter'],
111111
endpoints: (build) => ({
112112
counters: build.infiniteQuery<HitCounter, string, number>({
113-
queryFn(page) {
113+
queryFn({ pageParam }) {
114114
hitCounter++
115115

116-
return { data: { page, hitCounter } }
116+
return { data: { page: pageParam, hitCounter } }
117117
},
118118
infiniteQueryOptions: {
119119
initialPageParam: 0,
@@ -663,7 +663,7 @@ describe('Infinite queries', () => {
663663
return firstPageParam > 0 ? firstPageParam - 1 : undefined
664664
},
665665
},
666-
query(pageParam) {
666+
query({ pageParam }) {
667667
return `https://example.com/listItems?page=${pageParam}`
668668
},
669669
}),
@@ -809,7 +809,7 @@ describe('Infinite queries', () => {
809809
return firstPageParam > 0 ? firstPageParam - 1 : undefined
810810
},
811811
},
812-
query(pageParam) {
812+
query({ pageParam }) {
813813
return `https://example.com/listItems?page=${pageParam}`
814814
},
815815
async onCacheEntryAdded(arg, api) {
@@ -879,14 +879,14 @@ describe('Infinite queries', () => {
879879
allPageParams,
880880
) => lastPageParam + 1,
881881
},
882-
query(pageParam) {
882+
query({ pageParam }) {
883883
return `https://example.com/listItems?page=${pageParam}`
884884
},
885885
transformResponse(baseQueryReturnValue: Pokemon[], meta, arg) {
886886
expect(Array.isArray(baseQueryReturnValue)).toBe(true)
887887
return {
888888
items: baseQueryReturnValue,
889-
page: arg,
889+
page: arg.pageParam,
890890
}
891891
},
892892
}),

0 commit comments

Comments
 (0)