Skip to content

Commit 4b61121

Browse files
author
liaoliao666
committed
feat: return variables from createBaseQuery & more test cases
1 parent 42d0036 commit 4b61121

16 files changed

Lines changed: 1547 additions & 549 deletions

README-zh_CN.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ Expose Methods
164164

165165
Returns
166166

167+
- `queryKey: [primaryKey, TVariables]`
168+
- 自定义hook的queryKey.
169+
- `variables: TVariables`
170+
- 自定义hook的variables.
167171
- `setData: (updater: Updater<TData>, options?: SetDataOptions) => TData | undefined`
168172
- 它的参数与 `queryClient.setQueryData` 类似,但不需要传入 `queryKey`
169173

@@ -270,6 +274,10 @@ Expose Methods
270274

271275
Returns
272276

277+
- `queryKey: [primaryKey, TVariables]`
278+
- 自定义hook的queryKey.
279+
- `variables: TVariables`
280+
- 自定义hook的variables.
273281
- `setData: (updater: Updater<TData>, options?: SetDataOptions) => TData | undefined`
274282
- 它的参数与 `queryClient.setQueryData` 类似,但不需要传入 `queryKey`
275283

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,10 @@ Expose Methods
171171

172172
Returns
173173

174-
- `queryKey: unknown[]`
174+
- `queryKey: [primaryKey, TVariables]`
175175
- The query key of this custom query.
176+
- `variables: TVariables`
177+
- The variables of this custom query.
176178
- `setData: (updater: Updater<TData>, options?: SetDataOptions) => TData | undefined`
177179
- it's args similar with `queryClient.setQueryData` but without `queryKey`
178180

@@ -286,8 +288,10 @@ Expose Methods
286288

287289
Returns
288290

289-
- `queryKey: unknown[]`
291+
- `queryKey: [primaryKey, TVariables]`
290292
- The query key of this custom query.
293+
- `variables: TVariables`
294+
- The variables of this custom query.
291295
- `setData: (updater: Updater<InfiniteData<TFnData>>, options?: SetDataOptions) => TData | undefined`
292296
- it's args similar with `queryClient.setQueryData` but without `queryKey`
293297

@@ -370,7 +374,7 @@ You can extract the TypeScript type of any custom hook with `inferVariables` or
370374
import { inferVariables, inferData, inferFnData } from 'react-query-kit'
371375

372376
type Variables = inferVariables<typeof usePost>
373-
type Data = inferData<typeof usePost>
377+
type Data = inferData<typeof usePost>
374378
type FnData = inferFnData<typeof usePost>
375379
```
376380

jest.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const config = {
33
transform: {
44
'\\.[jt]sx?$': 'ts-jest',
55
},
6+
testEnvironment: 'jsdom',
67
}
78

89
module.exports = config

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
"@rollup/plugin-node-resolve": "^13.2.1",
2929
"@rollup/plugin-replace": "^4.0.0",
3030
"@tanstack/react-query": "^5.0.0-alpha.19",
31+
"@testing-library/jest-dom": "^5.16.5",
32+
"@testing-library/react": "^14.0.0",
3133
"@types/jest": "^28.1.6",
3234
"@typescript-eslint/eslint-plugin": "^5.32.0",
3335
"@typescript-eslint/parser": "^5.32.0",
@@ -39,15 +41,17 @@
3941
"eslint-plugin-react": "^7.30.1",
4042
"eslint-plugin-react-hooks": "^4.6.0",
4143
"husky": "^8.0.1",
42-
"jest": "^28.1.3",
44+
"jest": "^29.5.0",
45+
"jest-environment-jsdom": "^29.5.0",
4346
"prettier": "^2.7.1",
4447
"react": "^18.2.0",
48+
"react-dom": "^18.2.0",
4549
"replace": "^1.2.1",
4650
"rollup": "^2.77.2",
4751
"rollup-plugin-size": "^0.2.2",
4852
"rollup-plugin-terser": "^7.0.2",
4953
"rollup-plugin-visualizer": "^5.7.1",
50-
"ts-jest": "^28.0.8",
54+
"ts-jest": "^29.1.0",
5155
"typescript": "^4.8.2"
5256
},
5357
"peerDependencies": {

src/createBaseQuery.ts

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import type {
55
AdditionalQueryHookOptions,
66
Updater,
77
} from './types'
8-
import { isUndefined } from './utils'
98

109
interface CreateQueryOptions
1110
extends Omit<UseBaseQueryOptions, 'queryKey' | 'queryFn' | 'enabled'>,
@@ -35,54 +34,39 @@ export function createBaseQuery(
3534
const getPrimaryKey = () => primaryKey
3635

3736
const getKey = (variables?: any) =>
38-
isUndefined(variables) ? [primaryKey] : [primaryKey, variables]
37+
variables === undefined ? [primaryKey] : [primaryKey, variables]
3938

40-
const useGeneratedQuery = ({
41-
variables: currVariables,
42-
...currOptions
43-
}: QueryBaseHookOptions = {}) => {
44-
const {
45-
select: _select,
46-
variables: prevVariables,
47-
...prevOptions
48-
} = {
39+
const useGeneratedQuery = (options: QueryBaseHookOptions) => {
40+
const { enabled, variables, ...mergedOptions } = {
4941
...defaultOptions,
5042
...useDefaultOptions?.(),
43+
...options,
5144
} as QueryBaseHookOptions
5245

53-
const variables = isUndefined(currVariables) ? prevVariables : currVariables
54-
5546
const queryKey = getKey(variables)
5647

57-
const { enabled, ...mergedOptions } = {
58-
...prevOptions,
59-
...currOptions,
60-
queryKeyHashFn,
61-
queryFn,
62-
queryKey,
63-
}
64-
6548
const client = useQueryClient(
49+
// compatible with ReactQuery v4
6650
mergedOptions.context ? { context: mergedOptions.context } : queryClient
6751
)
6852

69-
const setData = (
70-
updater: Updater<any, any>,
71-
setDataOptions?: SetDataOptions
72-
) => client.setQueryData(queryKey, updater, setDataOptions)
73-
74-
const result = useRQHook(
75-
{
76-
...mergedOptions,
77-
enabled:
78-
typeof enabled === 'function'
79-
? enabled(client.getQueryData(queryKey), variables)
80-
: enabled,
81-
},
82-
client
83-
)
53+
const queryOptions = {
54+
...mergedOptions,
55+
enabled:
56+
typeof enabled === 'function'
57+
? enabled(client.getQueryData(queryKey), variables)
58+
: enabled,
59+
queryKeyHashFn,
60+
queryFn,
61+
queryKey,
62+
}
8463

85-
return Object.assign(result, { queryKey, setData })
64+
return Object.assign(useRQHook(queryOptions, client), {
65+
queryKey,
66+
variables,
67+
setData: (updater: Updater<any, any>, setDataOptions?: SetDataOptions) =>
68+
client.setQueryData(queryKey, updater, setDataOptions),
69+
})
8670
}
8771

8872
return Object.assign(useGeneratedQuery, {

src/createInfiniteQuery.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ import type {
99
InfiniteQueryHookOptions,
1010
} from './types'
1111

12-
interface CreateInfiniteQueryOptions<TFnData, TVariables, Error, TPageParam>
13-
extends Omit<
12+
export interface CreateInfiniteQueryOptions<
13+
TFnData,
14+
TVariables = any,
15+
Error = unknown,
16+
TPageParam = number
17+
> extends Omit<
1418
CompatibleUseInfiniteQueryOptions<TFnData, TVariables, Error, TPageParam>,
1519
'queryKey' | 'queryFn' | 'enabled' | 'select'
1620
>,
@@ -40,7 +44,7 @@ export function createInfiniteQuery<
4044
> & { variables: TVariables }
4145
},
4246
queryClient?: CompatibleWithV4<QueryClient, void>
43-
): InfiniteQueryHook<TFnData, TVariables, Error, TVariables | void, TPageParam>
47+
): InfiniteQueryHook<TFnData, TVariables, Error, TPageParam, TVariables | void>
4448

4549
export function createInfiniteQuery<
4650
TFnData,
@@ -59,14 +63,14 @@ export function createInfiniteQuery<
5963
TFnData,
6064
Error,
6165
TVariables,
62-
TVariables,
63-
TPageParam
66+
TPageParam,
67+
TVariables
6468
>,
6569
'select' | 'variables'
6670
>
6771
},
6872
queryClient?: CompatibleWithV4<QueryClient, void>
69-
): InfiniteQueryHook<TFnData, TVariables, Error, TVariables, TPageParam>
73+
): InfiniteQueryHook<TFnData, TVariables, Error, TPageParam, TVariables>
7074

7175
export function createInfiniteQuery<
7276
TFnData,
@@ -76,7 +80,7 @@ export function createInfiniteQuery<
7680
>(
7781
options: CreateInfiniteQueryOptions<TFnData, TVariables, Error, TPageParam>,
7882
queryClient?: CompatibleWithV4<QueryClient, void>
79-
): InfiniteQueryHook<TFnData, TVariables, Error, TVariables, TPageParam>
83+
): InfiniteQueryHook<TFnData, TVariables, Error, TPageParam, TVariables>
8084

8185
export function createInfiniteQuery(options: any, queryClient?: any) {
8286
return createBaseQuery(options, useInfiniteQuery, queryClient)

src/createMutation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type {
66
MutationHookOptions,
77
} from './types'
88

9-
interface CreateMutationOptions<TData, TError, TVariables, TContext>
9+
export interface CreateMutationOptions<TData, TError, TVariables, TContext>
1010
extends UseMutationOptions<TData, TError, TVariables, TContext> {
1111
useDefaultOptions?: () => MutationHookOptions<
1212
TData,

src/createQuery.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import type {
66
CompatibleWithV4,
77
QueryHook,
88
QueryHookOptions,
9-
QueryKitKey,
9+
inferQueryKey,
1010
} from './types'
1111

12-
interface CreateQueryOptions<TFnData, TVariables, Error>
12+
export interface CreateQueryOptions<TFnData, TVariables = any, Error = unknown>
1313
extends Omit<
14-
UseQueryOptions<TFnData, Error, TFnData, QueryKitKey<TVariables>>,
14+
UseQueryOptions<TFnData, Error, TFnData, inferQueryKey<TVariables>>,
1515
'queryKey' | 'queryFn' | 'enabled' | 'select'
1616
>,
1717
AdditionalCreateOptions<TFnData, TVariables> {}

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ export * from './createQuery'
44
export type {
55
QueryHookOptions,
66
QueryHook,
7+
QueryHookResult,
78
InfiniteQueryHookOptions,
89
InfiniteQueryHook,
10+
InfiniteQueryHookResult,
911
MutationHookOptions,
1012
MutationHook,
1113
inferVariables,

0 commit comments

Comments
 (0)