Skip to content

Commit 040680e

Browse files
author
liaoxuan
committed
feat: new expose method getOptions
1 parent 1136309 commit 040680e

6 files changed

+33
-6
lines changed

README-zh_CN.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ const data = await queryClient.fetchQuery(
133133
// useQueries 例子
134134
const queries = useQueries({
135135
queries: [
136-
usePost.getFetchOptions(variables),
137-
useUser.getFetchOptions(),
136+
usePost.getOptions(variables),
137+
useUser.getOptions(),
138138
],
139139
})
140140

@@ -159,6 +159,7 @@ Expose Methods
159159
- `getKey: (variables: TVariables) => [primaryKey, variables]`
160160
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
161161
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
162+
- `getOptions: (variables: TVariables) => UseInfiniteQueryOptions`
162163
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn })`
163164

164165
## createInfiniteQuery
@@ -255,6 +256,7 @@ Expose Methods
255256
- `getKey: (variables: TVariables) => [primaryKey, variables]`
256257
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
257258
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
259+
- `getOptions: (variables: TVariables) => UseInfiniteQueryOptions`
258260
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn, getNextPageParam, getPreviousPageParam, initialPageParam })`
259261

260262
## createSuspenseQuery

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ const data = await queryClient.fetchQuery(usePost.getFetchOptions(variables))
135135
// useQueries example
136136
const queries = useQueries({
137137
queries: [
138-
usePost.getFetchOptions(variables),
139-
useUser.getFetchOptions(),
138+
usePost.getOptions(variables),
139+
useUser.getOptions(),
140140
],
141141
})
142142

@@ -161,6 +161,7 @@ Expose Methods
161161
- `getKey: (variables: TVariables) => [primaryKey, variables]`
162162
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
163163
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
164+
- `getOptions: (variables: TVariables) => UseQueryOptions`
164165
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn })`
165166

166167
## createInfiniteQuery
@@ -257,6 +258,7 @@ Expose Methods
257258
- `getKey: (variables: TVariables) => [primaryKey, variables]`
258259
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
259260
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
261+
- `getOptions: (variables: TVariables) => UseInfiniteQueryOptions`
260262
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn, getNextPageParam, getPreviousPageParam, initialPageParam })`
261263

262264
## createSuspenseQuery

src/createBaseQuery.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@ export const createBaseQuery = (
3939

4040
if (process.env.NODE_ENV !== 'production') {
4141
if (existedPrimaryKeys.has(primaryKey)) {
42-
throw new Error(`[Bug] Duplicated primaryKey: ${primaryKey}`)
42+
console.error(`[Bug] Duplicated primaryKey: ${primaryKey}`)
4343
} else {
4444
existedPrimaryKeys.add(primaryKey)
4545
}
4646

4747
// @ts-ignore
4848
if (defaultOptions.useDefaultOptions) {
49-
throw new Error(
49+
console.error(
5050
'[Bug] useDefaultOptions is not supported, please use middleware instead.'
5151
)
5252
}
@@ -56,6 +56,13 @@ export const createBaseQuery = (
5656

5757
const getKey = (variables?: any) => getQueryKey(primaryKey, variables)
5858

59+
const getOptions = (variables: any) => {
60+
return {
61+
...defaultOptions,
62+
queryKey: getKey(variables),
63+
}
64+
}
65+
5966
const getFetchOptions = (variables: any) => {
6067
return {
6168
queryKey: getKey(variables),
@@ -86,6 +93,7 @@ export const createBaseQuery = (
8693
getKey,
8794
queryFn,
8895
queryKeyHashFn,
96+
getOptions,
8997
getFetchOptions,
9098
})
9199
}

src/types.ts

+3
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ export type ExposeMethods<TFnData, TVariables, TPageParam = never> = {
139139
>
140140
queryKeyHashFn?: QueryKeyHashFunction<inferQueryKey<TVariables>>
141141
} & CompatibleInfiniteQueryPageParamsOptions<TFnData, TPageParam>
142+
// TODO This seems pretty hacky for select & useQueries.
143+
// But not work to infer TError, Hope to fix it.
144+
getOptions: ExposeMethods<TFnData, TVariables, TPageParam>['getFetchOptions']
142145
}
143146

144147
// query hook

tests/createInfiniteQuery.test.tsx

+7
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ describe('createInfiniteQuery', () => {
2626
expect(useGeneratedQuery.getPrimaryKey()).toBe(primaryKey)
2727
expect(useGeneratedQuery.getKey()).toEqual([primaryKey])
2828
expect(useGeneratedQuery.getKey(variables)).toEqual([primaryKey, variables])
29+
expect(useGeneratedQuery.getOptions(variables)).toEqual({
30+
primaryKey,
31+
queryKey: [primaryKey, variables],
32+
queryFn,
33+
initialPageParam,
34+
getNextPageParam,
35+
})
2936
expect(useGeneratedQuery.getFetchOptions(variables)).toEqual({
3037
queryKey: [primaryKey, variables],
3138
queryFn,

tests/createQuery.test.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ describe('createQuery', () => {
2222
expect(useGeneratedQuery.getPrimaryKey()).toBe(primaryKey)
2323
expect(useGeneratedQuery.getKey()).toEqual([primaryKey])
2424
expect(useGeneratedQuery.getKey(variables)).toEqual([primaryKey, variables])
25+
expect(useGeneratedQuery.getOptions(variables)).toEqual({
26+
primaryKey,
27+
queryKey: [primaryKey, variables],
28+
queryFn,
29+
})
2530
expect(useGeneratedQuery.getFetchOptions(variables)).toEqual({
2631
queryKey: [primaryKey, variables],
2732
queryFn,

0 commit comments

Comments
 (0)