11import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs'
22import type {
3+ EndpointDefinition ,
34 EndpointDefinitions ,
45 InfiniteQueryArgFrom ,
56 InfiniteQueryDefinition ,
@@ -206,14 +207,14 @@ export function buildSelectors<
206207 return state
207208 }
208209
209- function buildQuerySelector (
210+ function buildAnyQuerySelector (
210211 endpointName : string ,
211- endpointDefinition : QueryDefinition < any , any , any , any > ,
212+ endpointDefinition : EndpointDefinition < any , any , any , any > ,
213+ combiner : < T extends { status : QueryStatus } > (
214+ substate : T ,
215+ ) => T & RequestStatusFlags ,
212216 ) {
213- return ( ( queryArgs : any ) => {
214- if ( queryArgs === skipToken ) {
215- return createSelector ( selectSkippedQuery , withRequestFlags )
216- }
217+ return ( queryArgs : any ) => {
217218 const serializedArgs = serializeQueryArgs ( {
218219 queryArgs,
219220 endpointDefinition,
@@ -222,76 +223,64 @@ export function buildSelectors<
222223 const selectQuerySubstate = ( state : RootState ) =>
223224 selectInternalState ( state ) ?. queries ?. [ serializedArgs ] ??
224225 defaultQuerySubState
226+ const finalSelectQuerySubState =
227+ queryArgs === skipToken ? selectSkippedQuery : selectQuerySubstate
228+
229+ return createSelector ( finalSelectQuerySubState , combiner )
230+ }
231+ }
225232
226- return createSelector ( selectQuerySubstate , withRequestFlags )
227- } ) as QueryResultSelectorFactory < any , RootState >
233+ function buildQuerySelector (
234+ endpointName : string ,
235+ endpointDefinition : QueryDefinition < any , any , any , any > ,
236+ ) {
237+ return buildAnyQuerySelector (
238+ endpointName ,
239+ endpointDefinition ,
240+ withRequestFlags ,
241+ ) as QueryResultSelectorFactory < any , RootState >
228242 }
229243
230- // Selector will merge all existing entries in the cache and return the result
231- // selector currently is just a clone of Query though
232244 function buildInfiniteQuerySelector (
233245 endpointName : string ,
234246 endpointDefinition : InfiniteQueryDefinition < any , any , any , any , any > ,
235247 ) {
236- return ( ( queryArgs : any ) => {
237- const serializedArgs = serializeQueryArgs ( {
238- queryArgs,
239- endpointDefinition,
240- endpointName,
241- } )
242- const selectQuerySubstate = ( state : RootState ) =>
243- selectInternalState ( state ) ?. queries ?. [ serializedArgs ] ??
244- defaultQuerySubState
245- const finalSelectQuerySubState =
246- queryArgs === skipToken ? selectSkippedQuery : selectQuerySubstate
247-
248- const { infiniteQueryOptions } = endpointDefinition
249-
250- function withInfiniteQueryResultFlags < T extends { status : QueryStatus } > (
251- substate : T ,
252- ) : T & RequestStatusFlags & InfiniteQueryResultFlags {
253- const infiniteSubstate = substate as InfiniteQuerySubState < any >
254- const fetchDirection = infiniteSubstate . direction
255- const stateWithRequestFlags = {
256- ...infiniteSubstate ,
257- ...getRequestStatusFlags ( substate . status ) ,
258- }
259-
260- const { isLoading, isError } = stateWithRequestFlags
261-
262- const isFetchNextPageError = isError && fetchDirection === 'forward'
263- const isFetchingNextPage = isLoading && fetchDirection === 'forward'
248+ const { infiniteQueryOptions } = endpointDefinition
249+
250+ function withInfiniteQueryResultFlags < T extends { status : QueryStatus } > (
251+ substate : T ,
252+ ) : T & RequestStatusFlags & InfiniteQueryResultFlags {
253+ const stateWithRequestFlags = {
254+ ...( substate as InfiniteQuerySubState < any > ) ,
255+ ...getRequestStatusFlags ( substate . status ) ,
256+ }
264257
265- const isFetchPreviousPageError =
266- isError && fetchDirection === 'backward'
267- const isFetchingPreviousPage =
268- isLoading && fetchDirection === 'backward'
258+ const { isLoading, isError, direction } = stateWithRequestFlags
259+ const isForward = direction === 'forward'
260+ const isBackward = direction === 'backward'
269261
270- const hasNextPage = getHasNextPage (
262+ return {
263+ ...stateWithRequestFlags ,
264+ hasNextPage : getHasNextPage (
271265 infiniteQueryOptions ,
272266 stateWithRequestFlags . data ,
273- )
274- const hasPreviousPage = getHasPreviousPage (
267+ ) ,
268+ hasPreviousPage : getHasPreviousPage (
275269 infiniteQueryOptions ,
276270 stateWithRequestFlags . data ,
277- )
278-
279- return {
280- ...stateWithRequestFlags ,
281- hasNextPage,
282- hasPreviousPage,
283- isFetchingNextPage,
284- isFetchingPreviousPage,
285- isFetchNextPageError,
286- isFetchPreviousPageError,
287- }
271+ ) ,
272+ isFetchingNextPage : isLoading && isForward ,
273+ isFetchingPreviousPage : isLoading && isBackward ,
274+ isFetchNextPageError : isError && isForward ,
275+ isFetchPreviousPageError : isError && isBackward ,
288276 }
277+ }
289278
290- return createSelector (
291- finalSelectQuerySubState ,
292- withInfiniteQueryResultFlags ,
293- )
294- } ) as InfiniteQueryResultSelectorFactory < any , RootState >
279+ return buildAnyQuerySelector (
280+ endpointName ,
281+ endpointDefinition ,
282+ withInfiniteQueryResultFlags ,
283+ ) as unknown as InfiniteQueryResultSelectorFactory < any , RootState >
295284 }
296285
297286 function buildMutationSelector ( ) {
0 commit comments