Skip to content
5 changes: 5 additions & 0 deletions .changeset/cute-cloths-switch.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
---
'@tanstack/preact-query': minor
---

preact-query: update usePrefetchQuery and usePrefetchInfiniteQuery to use queryClient.query and queryClient.infiniteQuery
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@ title: usePrefetchInfiniteQuery
function usePrefetchInfiniteQuery<TQueryFnData, TError, TData, TQueryKey, TPageParam>(options, queryClient?): void;
```

Defined in: [preact-query/src/usePrefetchInfiniteQuery.tsx:10](https://github.com/TanStack/query/blob/main/packages/preact-query/src/usePrefetchInfiniteQuery.tsx#L10)
Defined in: [preact-query/src/usePrefetchInfiniteQuery.tsx:7](https://github.com/TanStack/query/blob/main/packages/preact-query/src/usePrefetchInfiniteQuery.tsx#L7)

## Type Parameters

Expand DownExpand Up@@ -35,7 +35,7 @@ Defined in: [preact-query/src/usePrefetchInfiniteQuery.tsx:10](https://github.co

### options

`FetchInfiniteQueryOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\>
[`UsePrefetchInfiniteQueryOptions`](../interfaces/UsePrefetchInfiniteQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\>

### queryClient?

Expand Down
10 changes: 7 additions & 3 deletions docs/framework/preact/reference/functions/usePrefetchQuery.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,10 +4,10 @@ title: usePrefetchQuery
---

```ts
function usePrefetchQuery<TQueryFnData, TError, TData, TQueryKey>(options, queryClient?): void;
function usePrefetchQuery<TQueryFnData, TError, TData, TQueryData, TQueryKey>(options, queryClient?): void;
```

Defined in: [preact-query/src/usePrefetchQuery.tsx:6](https://github.com/TanStack/query/blob/main/packages/preact-query/src/usePrefetchQuery.tsx#L6)
Defined in: [preact-query/src/usePrefetchQuery.tsx:7](https://github.com/TanStack/query/blob/main/packages/preact-query/src/usePrefetchQuery.tsx#L7)

## Type Parameters

Expand All@@ -23,6 +23,10 @@ Defined in: [preact-query/src/usePrefetchQuery.tsx:6](https://github.com/TanStac

`TData` = `TQueryFnData`

### TQueryData

`TQueryData` = `TQueryFnData`

### TQueryKey

`TQueryKey` *extends* readonly `unknown`[] = readonly `unknown`[]
Expand All@@ -31,7 +35,7 @@ Defined in: [preact-query/src/usePrefetchQuery.tsx:6](https://github.com/TanStac

### options

[`UsePrefetchQueryOptions`](../interfaces/UsePrefetchQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>
[`UsePrefetchQueryOptions`](../interfaces/UsePrefetchQueryOptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryData`, `TQueryKey`\>

### queryClient?

Expand Down
1 change: 1 addition & 0 deletions docs/framework/preact/reference/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ title: "@tanstack/preact-query"
- [UseBaseQueryOptions](interfaces/UseBaseQueryOptions.md)
- [UseInfiniteQueryOptions](interfaces/UseInfiniteQueryOptions.md)
- [UseMutationOptions](interfaces/UseMutationOptions.md)
- [UsePrefetchInfiniteQueryOptions](interfaces/UsePrefetchInfiniteQueryOptions.md)
- [UsePrefetchQueryOptions](interfaces/UsePrefetchQueryOptions.md)
- [UseQueryOptions](interfaces/UseQueryOptions.md)
- [UseSuspenseInfiniteQueryOptions](interfaces/UseSuspenseInfiniteQueryOptions.md)
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
---
id: UsePrefetchInfiniteQueryOptions
title: UsePrefetchInfiniteQueryOptions
---

```ts
type UsePrefetchInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>
```

Defined in: [preact-query/src/types.ts:72](https://github.com/TanStack/query/blob/main/packages/preact-query/src/types.ts#L72)

## Type Declaration

### queryFn?

```ts
optional queryFn: QueryFunction<TQueryFnData, TQueryKey, TPageParam>;
```

## Type Parameters

### TQueryFnData

`TQueryFnData` = `unknown`

### TError

`TError` = `DefaultError`

### TData

`TData` = `TQueryFnData`

### TQueryKey

`TQueryKey` *extends* `QueryKey` = `QueryKey`

### TPageParam

`TPageParam` = `unknown`
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,11 +3,19 @@ id: UsePrefetchQueryOptions
title: UsePrefetchQueryOptions
---

Defined in: [preact-query/src/types.ts:48](https://github.com/TanStack/query/blob/main/packages/preact-query/src/types.ts#L48)
```ts
type UsePrefetchQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>
```

## Extends
Defined in: [preact-query/src/types.ts:50](https://github.com/TanStack/query/blob/main/packages/preact-query/src/types.ts#L50)

- `OmitKeyof`\<`FetchQueryOptions`\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`\>, `"queryFn"`\>
## Type Declaration

### queryFn?

```ts
optional queryFn: QueryFunction<TQueryFnData, TQueryKey, never>;
```

## Type Parameters

Expand All@@ -23,16 +31,10 @@ Defined in: [preact-query/src/types.ts:48](https://github.com/TanStack/query/blo

`TData` = `TQueryFnData`

### TQueryKey

`TQueryKey` *extends* `QueryKey` = `QueryKey`
### TQueryData

## Properties
`TQueryData` = `TQueryFnData`

### queryFn?

```ts
optional queryFn: QueryFunction<TQueryFnData, TQueryKey, never>;
```
### TQueryKey

Defined in: [preact-query/src/types.ts:57](https://github.com/TanStack/query/blob/main/packages/preact-query/src/types.ts#L57)
`TQueryKey` *extends* `QueryKey` = `QueryKey`
12 changes: 12 additions & 0 deletions packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,18 @@ describe('pageParam', () => {
})
})

it('initialPageParam should define type of param passed to queryFunctionContext for infiniteQuery', () => {
const queryClient = new QueryClient()
queryClient.infiniteQuery({
queryKey: ['key'],
queryFn: ({ pageParam }) => {
expectTypeOf(pageParam).toEqualTypeOf<number>()
return Promise.resolve(pageParam)
},
initialPageParam: 1,
})
})

it('initialPageParam should define type of param passed to queryFunctionContext for prefetchInfiniteQuery', () => {
const queryClient = new QueryClient()
queryClient.prefetchInfiniteQuery({
Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import { queryKey } from '@tanstack/query-test-utils'
import { assertType, describe, expectTypeOf, it } from 'vitest'

import { usePrefetchInfiniteQuery } from '..'
import { skipToken, usePrefetchInfiniteQuery } from '..'

describe('usePrefetchInfiniteQuery', () => {
it('should return nothing', () => {
Expand DownExpand Up@@ -59,4 +59,25 @@ describe('usePrefetchInfiniteQuery', () => {
}),
)
})

it('should not allow skipToken in queryFn', () => {
assertType(
usePrefetchInfiniteQuery({
queryKey: queryKey(),
// @ts-expect-error
queryFn: skipToken,
initialPageParam: 1,
getNextPageParam: () => 1,
}),
)
assertType(
usePrefetchInfiniteQuery({
queryKey: queryKey(),
// @ts-expect-error
queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
initialPageParam: 1,
getNextPageParam: () => 1,
}),
)
})
})
16 changes: 16 additions & 0 deletions packages/preact-query/src/__tests__/usePrefetchQuery.test-d.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,22 @@ describe('usePrefetchQuery', () => {
expectTypeOf(result).toEqualTypeOf<void>()
})

it('should forward query data and query key types', () => {
type CustomQueryKey = readonly ['key', number]

usePrefetchQuery<string, Error, number, Array<string>, CustomQueryKey>({
queryKey: ['key', 1],
queryFn: (context) => {
expectTypeOf(context.queryKey).toEqualTypeOf<CustomQueryKey>()
return Promise.resolve('data')
},
select: (data) => {
expectTypeOf(data).toEqualTypeOf<Array<string>>()
return data.length
},
})
})

it('should not allow refetchInterval, enabled or throwOnError options', () => {
assertType(
usePrefetchQuery({
Expand Down
48 changes: 42 additions & 6 deletions packages/preact-query/src/types.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,15 +4,16 @@ import type {
DefinedInfiniteQueryObserverResult,
DefinedQueryObserverResult,
DistributiveOmit,
FetchQueryOptions,
InfiniteData,
InfiniteQueryExecuteOptions,
InfiniteQueryObserverOptions,
InfiniteQueryObserverResult,
MutateFunction,
MutationObserverOptions,
MutationObserverResult,
OmitKeyof,
Override,
QueryExecuteOptions,
QueryKey,
QueryObserverOptions,
QueryObserverResult,
Expand DownExpand Up@@ -46,17 +47,52 @@ export interface UseBaseQueryOptions<
subscribed?: boolean
}

export interface UsePrefetchQueryOptions<
export type UsePrefetchQueryOptions<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
> extends OmitKeyof<
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
> = DistributiveOmit<
QueryExecuteOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
'queryFn'
Comment thread
coderabbitai[bot] marked this conversation as resolved.
> {
> & {
queryFn?: Exclude<
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
QueryExecuteOptions<
TQueryFnData,
TError,
TData,
TQueryFnData,
TQueryKey
>['queryFn'],
SkipToken
>
}

export type UsePrefetchInfiniteQueryOptions<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
TPageParam = unknown,
> = DistributiveOmit<
InfiniteQueryExecuteOptions<
TQueryFnData,
TError,
TData,
TQueryKey,
TPageParam
>,
'queryFn'
> & {
queryFn?: Exclude<
InfiniteQueryExecuteOptions<
TQueryFnData,
TError,
TData,
TQueryKey,
TPageParam
>['queryFn'],
SkipToken
>
}
Expand Down
15 changes: 6 additions & 9 deletions packages/preact-query/src/usePrefetchInfiniteQuery.tsx
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
import type {
DefaultError,
FetchInfiniteQueryOptions,
QueryClient,
QueryKey,
} from '@tanstack/query-core'

import { noop } from '@tanstack/query-core'
import { useQueryClient } from './QueryClientProvider'

import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'
import type { UsePrefetchInfiniteQueryOptions } from './types'

export function usePrefetchInfiniteQuery<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
TPageParam = unknown,
>(
options: FetchInfiniteQueryOptions<
options: UsePrefetchInfiniteQueryOptions<
TQueryFnData,
TError,
TData,
Expand All@@ -26,6 +23,6 @@ export function usePrefetchInfiniteQuery<
const client = useQueryClient(queryClient)

if (!client.getQueryState(options.queryKey)) {
client.prefetchInfiniteQuery(options)
void client.infiniteQuery(options).catch(noop)
}
}
16 changes: 12 additions & 4 deletions packages/preact-query/src/usePrefetchQuery.tsx
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'

import { noop } from '@tanstack/query-core'
import { useQueryClient } from './QueryClientProvider'

import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'
import type { UsePrefetchQueryOptions } from './types'

export function usePrefetchQuery<
TQueryFnData = unknown,
TError = DefaultError,
TData = TQueryFnData,
TQueryData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UsePrefetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
options: UsePrefetchQueryOptions<
TQueryFnData,
TError,
TData,
TQueryData,
TQueryKey
>,
queryClient?: QueryClient,
) {
const client = useQueryClient(queryClient)

if (!client.getQueryState(options.queryKey)) {
client.prefetchQuery(options)
void client.fetchQuery(options).catch(noop)
}
}
Loading