Skip to content

Commit b9b4bb0

Browse files
committed
feat: useInfiniteQuery options support maybe ref type
1 parent 1bf2df6 commit b9b4bb0

File tree

3 files changed

+93
-36
lines changed

3 files changed

+93
-36
lines changed

packages/vue-query/src/__tests__/useInfiniteQuery.test-d.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expectTypeOf, it } from 'vitest'
2-
import { reactive } from 'vue-demi'
2+
import { computed, reactive } from 'vue-demi'
33
import { useInfiniteQuery } from '../useInfiniteQuery'
44
import { simpleFetcher } from './test-utils'
55
import type { InfiniteData } from '@tanstack/query-core'
@@ -81,4 +81,18 @@ describe('Discriminated union return type', () => {
8181
expectTypeOf(query.error).toEqualTypeOf<Error>()
8282
}
8383
})
84+
85+
it('should accept computed options', () => {
86+
const options = computed(() => ({
87+
queryKey: ['infiniteQuery'],
88+
queryFn: simpleFetcher,
89+
getNextPageParam: () => undefined,
90+
initialPageParam: 0,
91+
}))
92+
const query = reactive(useInfiniteQuery(options))
93+
94+
if (query.isSuccess) {
95+
expectTypeOf(query.data).toEqualTypeOf<InfiniteData<string, unknown>>()
96+
}
97+
})
8498
})

packages/vue-query/src/useBaseQuery.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ type UseQueryOptionsGeneric<
4949
TQueryFnData,
5050
TError,
5151
TData,
52-
TQueryData,
52+
TQueryFnData,
5353
TQueryKey,
5454
TPageParam
5555
>
Lines changed: 77 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { InfiniteQueryObserver } from '@tanstack/query-core'
22
import { useBaseQuery } from './useBaseQuery'
3+
import type { DefinedInitialDataInfiniteOptions, UndefinedInitialDataInfiniteOptions } from './infiniteQueryOptions'
34
import type {
45
DefaultError,
56
InfiniteData,
@@ -11,7 +12,7 @@ import type {
1112

1213
import type { UseBaseQueryReturnType } from './useBaseQuery'
1314

14-
import type { DeepUnwrapRef, MaybeRefDeep, MaybeRefOrGetter } from './types'
15+
import type { DeepUnwrapRef, MaybeRef, MaybeRefDeep, MaybeRefOrGetter } from './types'
1516
import type { QueryClient } from './queryClient'
1617

1718
export type UseInfiniteQueryOptions<
@@ -21,44 +22,80 @@ export type UseInfiniteQueryOptions<
2122
TQueryData = TQueryFnData,
2223
TQueryKey extends QueryKey = QueryKey,
2324
TPageParam = unknown,
24-
> = {
25-
[Property in keyof InfiniteQueryObserverOptions<
26-
TQueryFnData,
27-
TError,
28-
TData,
29-
TQueryData,
30-
TQueryKey,
31-
TPageParam
32-
>]: Property extends 'enabled'
33-
? MaybeRefOrGetter<
34-
InfiniteQueryObserverOptions<
35-
TQueryFnData,
36-
TError,
37-
TData,
38-
TQueryData,
39-
DeepUnwrapRef<TQueryKey>
40-
>[Property]
41-
>
42-
: MaybeRefDeep<
43-
InfiniteQueryObserverOptions<
44-
TQueryFnData,
45-
TError,
46-
TData,
47-
TQueryData,
48-
DeepUnwrapRef<TQueryKey>,
49-
TPageParam
50-
>[Property]
51-
>
52-
} & {
53-
shallow?: boolean
54-
}
25+
> = MaybeRef<
26+
{
27+
[Property in keyof InfiniteQueryObserverOptions<
28+
TQueryFnData,
29+
TError,
30+
TData,
31+
TQueryData,
32+
TQueryKey,
33+
TPageParam
34+
>]: Property extends 'enabled'
35+
? MaybeRefOrGetter<
36+
InfiniteQueryObserverOptions<
37+
TQueryFnData,
38+
TError,
39+
TData,
40+
TQueryData,
41+
DeepUnwrapRef<TQueryKey>
42+
>[Property]
43+
>
44+
: MaybeRefDeep<
45+
InfiniteQueryObserverOptions<
46+
TQueryFnData,
47+
TError,
48+
TData,
49+
TQueryData,
50+
DeepUnwrapRef<TQueryKey>,
51+
TPageParam
52+
>[Property]
53+
>
54+
} & {
55+
shallow?: boolean
56+
}
57+
>
5558

5659
export type UseInfiniteQueryReturnType<TData, TError> = UseBaseQueryReturnType<
5760
TData,
5861
TError,
5962
InfiniteQueryObserverResult<TData, TError>
6063
>
6164

65+
export function useInfiniteQuery<
66+
TQueryFnData,
67+
TError = DefaultError,
68+
TData = InfiniteData<TQueryFnData>,
69+
TQueryKey extends QueryKey = QueryKey,
70+
TPageParam = unknown,
71+
>(
72+
options: DefinedInitialDataInfiniteOptions<
73+
TQueryFnData,
74+
TError,
75+
TData,
76+
TQueryKey,
77+
TPageParam
78+
>,
79+
queryClient?: QueryClient,
80+
): UseInfiniteQueryReturnType<TData, TError>
81+
82+
export function useInfiniteQuery<
83+
TQueryFnData,
84+
TError = DefaultError,
85+
TData = InfiniteData<TQueryFnData>,
86+
TQueryKey extends QueryKey = QueryKey,
87+
TPageParam = unknown,
88+
>(
89+
options: UndefinedInitialDataInfiniteOptions<
90+
TQueryFnData,
91+
TError,
92+
TData,
93+
TQueryKey,
94+
TPageParam
95+
>,
96+
queryClient?: QueryClient,
97+
): UseInfiniteQueryReturnType<TData, TError>
98+
6299
export function useInfiniteQuery<
63100
TQueryFnData,
64101
TError = DefaultError,
@@ -75,10 +112,16 @@ export function useInfiniteQuery<
75112
TPageParam
76113
>,
77114
queryClient?: QueryClient,
78-
): UseInfiniteQueryReturnType<TData, TError> {
115+
): UseInfiniteQueryReturnType<TData, TError>
116+
117+
export function useInfiniteQuery(
118+
options: UseInfiniteQueryOptions,
119+
queryClient?: QueryClient,
120+
) {
79121
return useBaseQuery(
122+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
80123
InfiniteQueryObserver as typeof QueryObserver,
81124
options,
82125
queryClient,
83-
) as UseInfiniteQueryReturnType<TData, TError>
126+
)
84127
}

0 commit comments

Comments
 (0)