diff --git a/.changeset/cute-cloths-switch.md b/.changeset/cute-cloths-switch.md new file mode 100644 index 0000000000..9106e50a10 --- /dev/null +++ b/.changeset/cute-cloths-switch.md @@ -0,0 +1,5 @@ +--- +'@tanstack/preact-query': minor +--- + +preact-query: update usePrefetchQuery and usePrefetchInfiniteQuery to use queryClient.query and queryClient.infiniteQuery diff --git a/docs/framework/preact/reference/functions/usePrefetchInfiniteQuery.md b/docs/framework/preact/reference/functions/usePrefetchInfiniteQuery.md index ea76ffc475..179fc99f1f 100644 --- a/docs/framework/preact/reference/functions/usePrefetchInfiniteQuery.md +++ b/docs/framework/preact/reference/functions/usePrefetchInfiniteQuery.md @@ -7,7 +7,7 @@ title: usePrefetchInfiniteQuery function usePrefetchInfiniteQuery(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 @@ -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? diff --git a/docs/framework/preact/reference/functions/usePrefetchQuery.md b/docs/framework/preact/reference/functions/usePrefetchQuery.md index 2eddd78918..5ea47ff60e 100644 --- a/docs/framework/preact/reference/functions/usePrefetchQuery.md +++ b/docs/framework/preact/reference/functions/usePrefetchQuery.md @@ -4,10 +4,10 @@ title: usePrefetchQuery --- ```ts -function usePrefetchQuery(options, queryClient?): void; +function usePrefetchQuery(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 @@ -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`[] @@ -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? diff --git a/docs/framework/preact/reference/index.md b/docs/framework/preact/reference/index.md index ec26d5caf6..8b47d6ffc6 100644 --- a/docs/framework/preact/reference/index.md +++ b/docs/framework/preact/reference/index.md @@ -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) diff --git a/docs/framework/preact/reference/interfaces/UsePrefetchInfiniteQueryOptions.md b/docs/framework/preact/reference/interfaces/UsePrefetchInfiniteQueryOptions.md new file mode 100644 index 0000000000..a389c958db --- /dev/null +++ b/docs/framework/preact/reference/interfaces/UsePrefetchInfiniteQueryOptions.md @@ -0,0 +1,40 @@ +--- +id: UsePrefetchInfiniteQueryOptions +title: UsePrefetchInfiniteQueryOptions +--- + +```ts +type UsePrefetchInfiniteQueryOptions +``` + +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; +``` + +## Type Parameters + +### TQueryFnData + +`TQueryFnData` = `unknown` + +### TError + +`TError` = `DefaultError` + +### TData + +`TData` = `TQueryFnData` + +### TQueryKey + +`TQueryKey` *extends* `QueryKey` = `QueryKey` + +### TPageParam + +`TPageParam` = `unknown` diff --git a/docs/framework/preact/reference/interfaces/UsePrefetchQueryOptions.md b/docs/framework/preact/reference/interfaces/UsePrefetchQueryOptions.md index 5fdd4d15a7..1e3eaef90c 100644 --- a/docs/framework/preact/reference/interfaces/UsePrefetchQueryOptions.md +++ b/docs/framework/preact/reference/interfaces/UsePrefetchQueryOptions.md @@ -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 +``` -## 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; +``` ## Type Parameters @@ -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; -``` +### 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` diff --git a/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx b/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx index 11fd40f392..20ef2cdaa7 100644 --- a/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/useInfiniteQuery.test-d.tsx @@ -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() + return Promise.resolve(pageParam) + }, + initialPageParam: 1, + }) + }) + it('initialPageParam should define type of param passed to queryFunctionContext for prefetchInfiniteQuery', () => { const queryClient = new QueryClient() queryClient.prefetchInfiniteQuery({ diff --git a/packages/preact-query/src/__tests__/usePrefetchInfiniteQuery.test-d.tsx b/packages/preact-query/src/__tests__/usePrefetchInfiniteQuery.test-d.tsx index 048f340991..2c160bcb6c 100644 --- a/packages/preact-query/src/__tests__/usePrefetchInfiniteQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/usePrefetchInfiniteQuery.test-d.tsx @@ -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', () => { @@ -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, + }), + ) + }) }) diff --git a/packages/preact-query/src/__tests__/usePrefetchQuery.test-d.tsx b/packages/preact-query/src/__tests__/usePrefetchQuery.test-d.tsx index 6f5d510251..b50a0af1b0 100644 --- a/packages/preact-query/src/__tests__/usePrefetchQuery.test-d.tsx +++ b/packages/preact-query/src/__tests__/usePrefetchQuery.test-d.tsx @@ -13,6 +13,22 @@ describe('usePrefetchQuery', () => { expectTypeOf(result).toEqualTypeOf() }) + it('should forward query data and query key types', () => { + type CustomQueryKey = readonly ['key', number] + + usePrefetchQuery, CustomQueryKey>({ + queryKey: ['key', 1], + queryFn: (context) => { + expectTypeOf(context.queryKey).toEqualTypeOf() + return Promise.resolve('data') + }, + select: (data) => { + expectTypeOf(data).toEqualTypeOf>() + return data.length + }, + }) + }) + it('should not allow refetchInterval, enabled or throwOnError options', () => { assertType( usePrefetchQuery({ diff --git a/packages/preact-query/src/types.ts b/packages/preact-query/src/types.ts index 543fb08507..9a9b646e9e 100644 --- a/packages/preact-query/src/types.ts +++ b/packages/preact-query/src/types.ts @@ -4,8 +4,8 @@ import type { DefinedInfiniteQueryObserverResult, DefinedQueryObserverResult, DistributiveOmit, - FetchQueryOptions, InfiniteData, + InfiniteQueryExecuteOptions, InfiniteQueryObserverOptions, InfiniteQueryObserverResult, MutateFunction, @@ -13,6 +13,7 @@ import type { MutationObserverResult, OmitKeyof, Override, + QueryExecuteOptions, QueryKey, QueryObserverOptions, QueryObserverResult, @@ -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, +> = DistributiveOmit< + QueryExecuteOptions, 'queryFn' -> { +> & { queryFn?: Exclude< - FetchQueryOptions['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 > } diff --git a/packages/preact-query/src/usePrefetchInfiniteQuery.tsx b/packages/preact-query/src/usePrefetchInfiniteQuery.tsx index e408e34522..acfdc2bd32 100644 --- a/packages/preact-query/src/usePrefetchInfiniteQuery.tsx +++ b/packages/preact-query/src/usePrefetchInfiniteQuery.tsx @@ -1,12 +1,9 @@ -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, @@ -14,7 +11,7 @@ export function usePrefetchInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - options: FetchInfiniteQueryOptions< + options: UsePrefetchInfiniteQueryOptions< TQueryFnData, TError, TData, @@ -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) } } diff --git a/packages/preact-query/src/usePrefetchQuery.tsx b/packages/preact-query/src/usePrefetchQuery.tsx index e7a2a34634..376bf157c5 100644 --- a/packages/preact-query/src/usePrefetchQuery.tsx +++ b/packages/preact-query/src/usePrefetchQuery.tsx @@ -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, + 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) } }