diff --git a/.changeset/seven-apes-boil.md b/.changeset/seven-apes-boil.md new file mode 100644 index 0000000000..5eda74d714 --- /dev/null +++ b/.changeset/seven-apes-boil.md @@ -0,0 +1,5 @@ +--- +'@tanstack/vue-query': patch +--- + +Change UseQueryOptions and its derivatives diff --git a/packages/vue-query/src/queryOptions.ts b/packages/vue-query/src/queryOptions.ts index 4681080f8c..fa0f8401da 100644 --- a/packages/vue-query/src/queryOptions.ts +++ b/packages/vue-query/src/queryOptions.ts @@ -1,7 +1,11 @@ import type { DataTag, DefaultError, QueryKey } from '@tanstack/query-core' import type { DefinedInitialQueryOptions, + DefinedInitialQueryOptionsBase, + DefinedInitialQueryOptionsRef, UndefinedInitialQueryOptions, + UndefinedInitialQueryOptionsBase, + UndefinedInitialQueryOptionsRef, } from './useQuery' export function queryOptions< @@ -9,22 +13,36 @@ export function queryOptions< TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, + TOptions = DefinedInitialQueryOptions, + TReturnQueryKey = { + queryKey: DataTag + }, >( - options: DefinedInitialQueryOptions, -): DefinedInitialQueryOptions & { - queryKey: DataTag -} + options: TOptions, +): TOptions extends { value: unknown } + ? DefinedInitialQueryOptionsRef & + TOptions + : DefinedInitialQueryOptionsBase & + TOptions export function queryOptions< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, + TOptions = UndefinedInitialQueryOptions< + TQueryFnData, + TError, + TData, + TQueryKey + >, >( - options: UndefinedInitialQueryOptions, -): UndefinedInitialQueryOptions & { - queryKey: DataTag -} + options: TOptions, +): TOptions extends { value: unknown } + ? UndefinedInitialQueryOptionsRef & + TOptions + : UndefinedInitialQueryOptionsBase & + TOptions export function queryOptions(options: unknown) { return options diff --git a/packages/vue-query/src/useQuery.ts b/packages/vue-query/src/useQuery.ts index 3e1e825dcf..de60dab024 100644 --- a/packages/vue-query/src/useQuery.ts +++ b/packages/vue-query/src/useQuery.ts @@ -18,65 +18,147 @@ import type { ShallowOption, } from './types' import type { QueryClient } from './queryClient' +import { ComputedRef, Ref } from 'vue' -export type UseQueryOptions< +export type UseQueryOptionsBase< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = MaybeRef< - { - [Property in keyof QueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - TQueryKey - >]: Property extends 'enabled' - ? - | MaybeRefOrGetter - | (() => Enabled< - TQueryFnData, - TError, - TQueryData, - DeepUnwrapRef - >) - : MaybeRefDeep< - QueryObserverOptions< +> = { + [Property in keyof QueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey + >]: Property extends 'enabled' + ? + | MaybeRefOrGetter + | (() => Enabled< TQueryFnData, TError, - TData, TQueryData, DeepUnwrapRef - >[Property] - > - } & ShallowOption -> + >) + : MaybeRefDeep< + QueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + DeepUnwrapRef + >[Property] + > +} & ShallowOption -export type UndefinedInitialQueryOptions< +export type UseQueryOptionsRef< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = + | Ref> + | ComputedRef< + UseQueryOptionsBase + > + +export type UseQueryOptions< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, + TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = UseQueryOptions & { +> = + | UseQueryOptionsBase + | UseQueryOptionsRef + +export type UndefinedInitialQueryOptionsBase< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = UseQueryOptionsBase< + TQueryFnData, + TError, + TData, + TQueryFnData, + TQueryKey +> & { initialData?: | undefined | InitialDataFunction> | NonUndefinedGuard } -export type DefinedInitialQueryOptions< +export type UndefinedInitialQueryOptionsRef< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = UseQueryOptionsRef & { + initialData?: + | undefined + | InitialDataFunction> + | NonUndefinedGuard +} + +export type UndefinedInitialQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = + | UndefinedInitialQueryOptionsBase + | UndefinedInitialQueryOptionsRef + +export type DefinedInitialQueryOptionsBase< TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = UseQueryOptions & { +> = UseQueryOptionsBase< + TQueryFnData, + TError, + TData, + TQueryFnData, + TQueryKey +> & { initialData: | NonUndefinedGuard | (() => NonUndefinedGuard) } +export type DefinedInitialQueryOptionsRef< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = UseQueryOptionsRef & { + value: UseQueryOptionsRef< + TQueryFnData, + TError, + TData, + TQueryFnData, + TQueryKey + >['value'] & { + initialData: + | NonUndefinedGuard + | (() => NonUndefinedGuard) + } +} + +export type DefinedInitialQueryOptions< + TQueryFnData = unknown, + TError = DefaultError, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = + | DefinedInitialQueryOptionsBase + | DefinedInitialQueryOptionsRef + export type UseQueryReturnType = UseBaseQueryReturnType< TData, TError