Skip to content

Commit

Permalink
feat: new expose method getOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
liaoxuan committed Oct 11, 2023
1 parent 1136309 commit 040680e
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 6 deletions.
6 changes: 4 additions & 2 deletions README-zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,8 @@ const data = await queryClient.fetchQuery(
// useQueries 例子
const queries = useQueries({
queries: [
usePost.getFetchOptions(variables),
useUser.getFetchOptions(),
usePost.getOptions(variables),
useUser.getOptions(),
],
})

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

## createInfiniteQuery
Expand Down Expand Up @@ -255,6 +256,7 @@ Expose Methods
- `getKey: (variables: TVariables) => [primaryKey, variables]`
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
- `getOptions: (variables: TVariables) => UseInfiniteQueryOptions`
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn, getNextPageParam, getPreviousPageParam, initialPageParam })`

## createSuspenseQuery
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ const data = await queryClient.fetchQuery(usePost.getFetchOptions(variables))
// useQueries example
const queries = useQueries({
queries: [
usePost.getFetchOptions(variables),
useUser.getFetchOptions(),
usePost.getOptions(variables),
useUser.getOptions(),

This comment has been minimized.

Copy link
@emmanuelchucks

emmanuelchucks Oct 11, 2023

typescript complains unless you do useUser.getOptions({}) or useUser.getOptions(undefined)

This comment has been minimized.

Copy link
@liaoliao666

liaoliao666 Oct 11, 2023

Collaborator

Already fixed in v1.0.5

],
})

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

## createInfiniteQuery
Expand Down Expand Up @@ -257,6 +258,7 @@ Expose Methods
- `getKey: (variables: TVariables) => [primaryKey, variables]`
- `queryFn: QueryFunction<TFnData, [primaryKey, TVariables]>`
- `queryKeyHashFn: (queryKey: [primaryKey, TVariables]) => string`
- `getOptions: (variables: TVariables) => UseInfiniteQueryOptions`
- `getFetchOptions: (variables: TVariables) => ({ queryKey, queryFn, queryKeyHashFn, getNextPageParam, getPreviousPageParam, initialPageParam })`

## createSuspenseQuery
Expand Down
12 changes: 10 additions & 2 deletions src/createBaseQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ export const createBaseQuery = (

if (process.env.NODE_ENV !== 'production') {
if (existedPrimaryKeys.has(primaryKey)) {
throw new Error(`[Bug] Duplicated primaryKey: ${primaryKey}`)
console.error(`[Bug] Duplicated primaryKey: ${primaryKey}`)
} else {
existedPrimaryKeys.add(primaryKey)
}

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

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

const getOptions = (variables: any) => {
return {
...defaultOptions,
queryKey: getKey(variables),
}
}

const getFetchOptions = (variables: any) => {
return {
queryKey: getKey(variables),
Expand Down Expand Up @@ -86,6 +93,7 @@ export const createBaseQuery = (
getKey,
queryFn,
queryKeyHashFn,
getOptions,
getFetchOptions,
})
}
3 changes: 3 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,9 @@ export type ExposeMethods<TFnData, TVariables, TPageParam = never> = {
>
queryKeyHashFn?: QueryKeyHashFunction<inferQueryKey<TVariables>>
} & CompatibleInfiniteQueryPageParamsOptions<TFnData, TPageParam>
// TODO This seems pretty hacky for select & useQueries.
// But not work to infer TError, Hope to fix it.
getOptions: ExposeMethods<TFnData, TVariables, TPageParam>['getFetchOptions']
}

// query hook
Expand Down
7 changes: 7 additions & 0 deletions tests/createInfiniteQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ describe('createInfiniteQuery', () => {
expect(useGeneratedQuery.getPrimaryKey()).toBe(primaryKey)
expect(useGeneratedQuery.getKey()).toEqual([primaryKey])
expect(useGeneratedQuery.getKey(variables)).toEqual([primaryKey, variables])
expect(useGeneratedQuery.getOptions(variables)).toEqual({
primaryKey,
queryKey: [primaryKey, variables],
queryFn,
initialPageParam,
getNextPageParam,
})
expect(useGeneratedQuery.getFetchOptions(variables)).toEqual({
queryKey: [primaryKey, variables],
queryFn,
Expand Down
5 changes: 5 additions & 0 deletions tests/createQuery.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ describe('createQuery', () => {
expect(useGeneratedQuery.getPrimaryKey()).toBe(primaryKey)
expect(useGeneratedQuery.getKey()).toEqual([primaryKey])
expect(useGeneratedQuery.getKey(variables)).toEqual([primaryKey, variables])
expect(useGeneratedQuery.getOptions(variables)).toEqual({
primaryKey,
queryKey: [primaryKey, variables],
queryFn,
})
expect(useGeneratedQuery.getFetchOptions(variables)).toEqual({
queryKey: [primaryKey, variables],
queryFn,
Expand Down

0 comments on commit 040680e

Please sign in to comment.