Skip to content

Commit e76f88e

Browse files
authored
fix!: make page param patch for request (#11)
1 parent db63dc7 commit e76f88e

File tree

3 files changed

+30
-41
lines changed

3 files changed

+30
-41
lines changed

src/core/types/DataSource.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export interface DataSource<
2424
fetchContext: TFetchContext,
2525
request: TRequest,
2626
) => Promise<TResponse> | TResponse;
27-
tags?: (params: ActualParams<this, TParams, TRequest>) => DataSourceTag[];
27+
tags?: (params: ActualParams<TParams, TRequest>) => DataSourceTag[];
2828

2929
transformParams?: (params: TParams) => TRequest;
3030
transformResponse?: (response: TResponse) => TData;
@@ -65,7 +65,7 @@ export type DataSourceParams<TDataSource> =
6565
infer _TState,
6666
infer _TFetchContext
6767
>
68-
? ActualParams<TDataSource, TParams, TRequest>
68+
? ActualParams<TParams, TRequest>
6969
: never;
7070

7171
export type DataSourceRequest<TDataSource> =
@@ -173,12 +173,8 @@ export type DataSourceFetchContext<TDataSource> =
173173
? TFetchContext
174174
: never;
175175

176-
export type ActualParams<TDataSource extends AnyDataSource, TParams, TRequest> =
177-
| (unknown extends TParams
178-
? TRequest
179-
: undefined extends TDataSource['transformParams']
180-
? TRequest
181-
: TParams)
176+
export type ActualParams<TParams, TRequest> =
177+
| (unknown extends TParams ? TRequest : TParams)
182178
| typeof idle;
183179

184180
export type ActualData<TData, TResponse> = unknown extends TData ? TResponse : TData;

src/react-query/impl/infinite/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ export type InfiniteQueryDataSource<TParams, TRequest, TResponse, TData, TError>
1717
TError,
1818
InfiniteQueryObserverOptions<TResponse, TError, ActualData<TData, TResponse>, TResponse>,
1919
ResultWrapper<InfiniteQueryObserverResult<ActualData<TData, TResponse>, TError>>,
20-
QueryFunctionContext<DataSourceKey, TParams>
20+
QueryFunctionContext<DataSourceKey, Partial<TRequest> | undefined>
2121
> & {
2222
type: 'infinite';
23-
next: (lastPage: TResponse, allPages: TResponse[]) => Partial<TParams> | undefined;
24-
prev?: (firstPage: TResponse, allPages: TResponse[]) => Partial<TParams> | undefined;
23+
next: (lastPage: TResponse, allPages: TResponse[]) => Partial<TRequest> | undefined;
24+
prev?: (firstPage: TResponse, allPages: TResponse[]) => Partial<TRequest> | undefined;
2525
};
2626

2727
// eslint-disable-next-line @typescript-eslint/no-explicit-any

src/react-query/impl/infinite/utils.ts

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ import type {
44
QueryFunctionContext,
55
} from '@tanstack/react-query';
66

7-
import {
8-
type DataSourceContext,
9-
type DataSourceData,
10-
type DataSourceError,
11-
type DataSourceKey,
12-
type DataSourceOptions,
13-
type DataSourceParams,
14-
type DataSourceResponse,
15-
type DataSourceState,
16-
composeFullKey,
17-
idle,
7+
import {composeFullKey, idle} from '../../../core';
8+
import type {
9+
DataSourceContext,
10+
DataSourceData,
11+
DataSourceError,
12+
DataSourceKey,
13+
DataSourceOptions,
14+
DataSourceParams,
15+
DataSourceRequest,
16+
DataSourceResponse,
17+
DataSourceState,
1818
} from '../../../core';
1919
import {normalizeStatus} from '../../utils/normalizeStatus';
2020

@@ -40,31 +40,24 @@ export const composeOptions = <TDataSource extends AnyInfiniteQueryDataSource>(
4040
enabled: params !== idle,
4141
queryKey: composeFullKey(dataSource, params),
4242
queryFn: (
43-
fetchContext: QueryFunctionContext<DataSourceKey, DataSourceParams<TDataSource>>,
43+
fetchContext: QueryFunctionContext<
44+
DataSourceKey,
45+
Partial<DataSourceRequest<TDataSource>> | undefined
46+
>,
4447
) => {
45-
const actualParams = fetchContext.pageParam ?? params;
48+
const actualParams = transformParams ? transformParams(params) : params;
49+
const request =
50+
typeof actualParams === 'object'
51+
? {...actualParams, ...fetchContext.pageParam}
52+
: actualParams;
4653

47-
return dataSource.fetch(
48-
context,
49-
fetchContext,
50-
transformParams ? transformParams(actualParams) : actualParams,
51-
);
54+
return dataSource.fetch(context, fetchContext, request);
5255
},
5356
select: transformResponse
5457
? (data) => ({...data, pages: data.pages.map(transformResponse)})
5558
: undefined,
56-
getNextPageParam: (lastPage, allPages) => {
57-
const nextParamsPatch = next(lastPage, allPages);
58-
59-
return nextParamsPatch ? {...params, ...nextParamsPatch} : undefined;
60-
},
61-
getPreviousPageParam: prev
62-
? (firstPage, allPages) => {
63-
const prevParamsPatch = prev(firstPage, allPages);
64-
65-
return prevParamsPatch ? {...params, ...prevParamsPatch} : undefined;
66-
}
67-
: undefined,
59+
getNextPageParam: next,
60+
getPreviousPageParam: prev,
6861
...options,
6962
};
7063
};

0 commit comments

Comments
 (0)