From 8a019cbdba5fb21ee95da51227c94f2da6814767 Mon Sep 17 00:00:00 2001 From: chosunghoon Date: Wed, 9 Oct 2024 21:34:38 +0900 Subject: [PATCH 1/2] fix(react-query): Allow optional initialData in infiniteQueryoptions --- packages/react-query/src/infiniteQueryOptions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-query/src/infiniteQueryOptions.ts b/packages/react-query/src/infiniteQueryOptions.ts index a63def60e1..0137869745 100644 --- a/packages/react-query/src/infiniteQueryOptions.ts +++ b/packages/react-query/src/infiniteQueryOptions.ts @@ -42,6 +42,7 @@ export type DefinedInitialDataInfiniteOptions< initialData: | NonUndefinedGuard> | (() => NonUndefinedGuard>) + | undefined } export function infiniteQueryOptions< From 8d05ffe033762c0988157d53247cdd6d4ca8b85b Mon Sep 17 00:00:00 2001 From: chosunghoon Date: Wed, 9 Oct 2024 22:34:51 +0900 Subject: [PATCH 2/2] fixup! fix(react-query): Allow optional initialData in infiniteQueryoptions --- .../__tests__/infiniteQueryOptions.test-d.tsx | 21 ++++++++++++++++++- .../react-query/src/infiniteQueryOptions.ts | 8 +++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx index 27ee7529a2..ceedfcaac3 100644 --- a/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx +++ b/packages/react-query/src/__tests__/infiniteQueryOptions.test-d.tsx @@ -4,7 +4,7 @@ import { infiniteQueryOptions } from '../infiniteQueryOptions' import { useInfiniteQuery } from '../useInfiniteQuery' import { useSuspenseInfiniteQuery } from '../useSuspenseInfiniteQuery' import { useQuery } from '../useQuery' -import type { InfiniteData } from '@tanstack/query-core' +import type { InfiniteData, InitialDataFunction } from '@tanstack/query-core' describe('queryOptions', () => { it('should not allow excess properties', () => { @@ -152,4 +152,23 @@ describe('queryOptions', () => { // @ts-expect-error cannot pass infinite options to non-infinite query functions queryClient.prefetchQuery(options) }) + + test('allow optional initialData', () => { + const initialData: { example: boolean } | undefined = { example: true } + const queryOptions = infiniteQueryOptions({ + queryKey: ['example'], + queryFn: async () => initialData, + // initialData below errors + initialData: initialData + ? () => ({ pages: [initialData], pageParams: [] }) + : undefined, + getNextPageParam: () => 1, + initialPageParam: 1, + }) + queryOptions.initialData + expectTypeOf(queryOptions.initialData).toMatchTypeOf< + | InitialDataFunction> + | undefined + >() + }) }) diff --git a/packages/react-query/src/infiniteQueryOptions.ts b/packages/react-query/src/infiniteQueryOptions.ts index 0137869745..a4273230cc 100644 --- a/packages/react-query/src/infiniteQueryOptions.ts +++ b/packages/react-query/src/infiniteQueryOptions.ts @@ -2,6 +2,7 @@ import type { DataTag, DefaultError, InfiniteData, + InitialDataFunction, QueryKey, } from '@tanstack/query-core' import type { UseInfiniteQueryOptions } from './types' @@ -20,7 +21,11 @@ export type UndefinedInitialDataInfiniteOptions< TQueryKey, TPageParam > & { - initialData?: undefined + initialData?: + | undefined + | InitialDataFunction< + NonUndefinedGuard> + > } type NonUndefinedGuard = T extends undefined ? never : T @@ -42,7 +47,6 @@ export type DefinedInitialDataInfiniteOptions< initialData: | NonUndefinedGuard> | (() => NonUndefinedGuard>) - | undefined } export function infiniteQueryOptions<