Skip to content

Commit a59f90c

Browse files
authored
add infinite query type support for selectCachedArgsForQuery (#4880)
1 parent 72ac07d commit a59f90c

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
InfiniteQueryDefinition,
77
MutationDefinition,
88
PageParamFrom,
9-
QueryArgFrom,
9+
QueryArgFromAnyQuery,
1010
QueryDefinition,
1111
ResultTypeFrom,
1212
} from '../endpointDefinitions'
@@ -190,7 +190,7 @@ type BaseQuerySubState<
190190
/**
191191
* The argument originally passed into the hook or `initiate` action call
192192
*/
193-
originalArgs: QueryArgFrom<D>
193+
originalArgs: QueryArgFromAnyQuery<D>
194194
/**
195195
* A unique ID associated with the request
196196
*/

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
InfiniteQueryDefinition,
77
MutationDefinition,
88
QueryArgFrom,
9+
QueryArgFromAnyQuery,
910
QueryDefinition,
1011
ReducerPathFrom,
1112
TagDescription,
@@ -29,7 +30,11 @@ import { QueryStatus, getRequestStatusFlags } from './apiState'
2930
import { getMutationCacheKey } from './buildSlice'
3031
import type { createSelector as _createSelector } from './rtkImports'
3132
import { createNextState } from './rtkImports'
32-
import { getNextPageParam, getPreviousPageParam } from './buildThunks'
33+
import {
34+
type AllQueryKeys,
35+
getNextPageParam,
36+
getPreviousPageParam,
37+
} from './buildThunks'
3338

3439
export type SkipToken = typeof skipToken
3540
/**
@@ -372,10 +377,12 @@ export function buildSelectors<
372377
)
373378
}
374379

375-
function selectCachedArgsForQuery<QueryName extends QueryKeys<Definitions>>(
380+
function selectCachedArgsForQuery<
381+
QueryName extends AllQueryKeys<Definitions>,
382+
>(
376383
state: RootState,
377384
queryName: QueryName,
378-
): Array<QueryArgFrom<Definitions[QueryName]>> {
385+
): Array<QueryArgFromAnyQuery<Definitions[QueryName]>> {
379386
return Object.values(selectQueries(state) as QueryState<any>)
380387
.filter(
381388
(

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type {
1919
InfiniteQueryDefinition,
2020
MutationDefinition,
2121
QueryArgFrom,
22+
QueryArgFromAnyQuery,
2223
QueryDefinition,
2324
TagDescription,
2425
} from '../endpointDefinitions'
@@ -389,10 +390,10 @@ export interface ApiModules<
389390
*
390391
* Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.
391392
*/
392-
selectCachedArgsForQuery: <QueryName extends QueryKeys<Definitions>>(
393+
selectCachedArgsForQuery: <QueryName extends AllQueryKeys<Definitions>>(
393394
state: RootState<Definitions, string, ReducerPath>,
394395
queryName: QueryName,
395-
) => Array<QueryArgFrom<Definitions[QueryName]>>
396+
) => Array<QueryArgFromAnyQuery<Definitions[QueryName]>>
396397
}
397398
/**
398399
* Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.

packages/toolkit/src/query/endpointDefinitions.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,15 @@ export type InfiniteQueryArgFrom<
10591059
D extends BaseEndpointDefinition<any, any, any>,
10601060
> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any> ? QA : never
10611061

1062+
export type QueryArgFromAnyQuery<
1063+
D extends BaseEndpointDefinition<any, any, any>,
1064+
> =
1065+
D extends InfiniteQueryDefinition<any, any, any, any, any>
1066+
? InfiniteQueryArgFrom<D>
1067+
: D extends QueryDefinition<any, any, any, any>
1068+
? QueryArgFrom<D>
1069+
: never
1070+
10621071
export type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any>> =
10631072
D extends BaseEndpointDefinition<any, any, infer RT> ? RT : unknown
10641073

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ describe('type tests', () => {
7373
getTodos: build.query<Todos, string>({
7474
query: () => '/todos',
7575
}),
76+
getInfiniteTodos: build.infiniteQuery<Todos, string, number>({
77+
infiniteQueryOptions: {
78+
initialPageParam: 0,
79+
maxPages: 3,
80+
getNextPageParam: (
81+
lastPage,
82+
allPages,
83+
lastPageParam,
84+
allPageParams,
85+
) => lastPageParam + 1,
86+
},
87+
query({ pageParam }) {
88+
return `/todos?page=${pageParam}`
89+
},
90+
}),
7691
}),
7792
})
7893

@@ -86,5 +101,11 @@ describe('type tests', () => {
86101
expectTypeOf(
87102
exampleApi.util.selectCachedArgsForQuery(store.getState(), 'getTodos'),
88103
).toEqualTypeOf<string[]>()
104+
expectTypeOf(
105+
exampleApi.util.selectCachedArgsForQuery(
106+
store.getState(),
107+
'getInfiniteTodos',
108+
),
109+
).toEqualTypeOf<string[]>()
89110
})
90111
})

0 commit comments

Comments
 (0)