From 7da5d75cefa739b3c4ccfb9dc28d23ab6a65e591 Mon Sep 17 00:00:00 2001 From: DarioSiroki Date: Sat, 9 Sep 2023 13:41:18 +0200 Subject: [PATCH 1/3] refactor(queryClient): accept generics on setQueryDefaults and setMutationDefaults This change improves type inferring and improves DX. As an example, before this PR, variables accepted by onSettled and onError would not be typed. After this PR, and thanks to v5's default Error, the whole thing is now typed after you specify mutationFn and create a context. This means developer doesn't have to manually type cast anymore if he is working with data, context, error or response variables inside setMutationDefaults or setQueryDefaults methods. queryClient.setMutationDefaults(key, { mutationFn: async (text: string) => text, onMutate: () => { return 1 }, onSettled: (data, error, context) => { }, onError(error, variables, context) { }, }) --- packages/query-core/src/queryClient.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts index 5e5f13b179d..366058d53c6 100644 --- a/packages/query-core/src/queryClient.ts +++ b/packages/query-core/src/queryClient.ts @@ -372,10 +372,18 @@ export class QueryClient { this.#defaultOptions = options } - setQueryDefaults( + setQueryDefaults< + TData = unknown, + TError = DefaultError, + TVariables = void, + TContext = unknown, + >( queryKey: QueryKey, options: Partial< - Omit, 'queryKey'> + Omit< + QueryObserverOptions, + 'queryKey' + > >, ): void { this.#queryDefaults.set(hashKey(queryKey), { @@ -399,9 +407,17 @@ export class QueryClient { return result } - setMutationDefaults( + setMutationDefaults< + TData = unknown, + TError = DefaultError, + TVariables = void, + TContext = unknown, + >( mutationKey: MutationKey, - options: Omit, 'mutationKey'>, + options: Omit< + MutationObserverOptions, + 'mutationKey' + >, ): void { this.#mutationDefaults.set(hashKey(mutationKey), { mutationKey, From 5aab87b69b905243d7289b6ad487a99b47324851 Mon Sep 17 00:00:00 2001 From: DarioSiroki Date: Mon, 18 Sep 2023 12:03:30 +0200 Subject: [PATCH 2/3] fix(useQuery): align vue generic types with core types method signatures of setQueryDefaults and setMutationDefaults now match the core lib's signatures --- packages/vue-query/src/queryClient.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/vue-query/src/queryClient.ts b/packages/vue-query/src/queryClient.ts index 50daafa840f..7496c7cf4cb 100644 --- a/packages/vue-query/src/queryClient.ts +++ b/packages/vue-query/src/queryClient.ts @@ -245,10 +245,18 @@ export class QueryClient extends QC { super.setDefaultOptions(cloneDeepUnref(options)) } - setQueryDefaults( + setQueryDefaults< + TData = unknown, + TError = DefaultError, + TVariables = void, + TContext = unknown, + >( queryKey: MaybeRefDeep, options: MaybeRefDeep< - Omit, 'queryKey'> + Omit< + QueryObserverOptions, + 'queryKey' + > >, ): void { super.setQueryDefaults(cloneDeepUnref(queryKey), cloneDeepUnref(options)) @@ -260,9 +268,16 @@ export class QueryClient extends QC { return super.getQueryDefaults(cloneDeepUnref(queryKey)) } - setMutationDefaults( + setMutationDefaults< + TData = unknown, + TError = DefaultError, + TVariables = void, + TContext = unknown, + >( mutationKey: MaybeRefDeep, - options: MaybeRefDeep>, + options: MaybeRefDeep< + MutationObserverOptions + >, ): void { super.setMutationDefaults( cloneDeepUnref(mutationKey), From 3acbc3a70820ea0fb4c4b808f74b93760a29f92e Mon Sep 17 00:00:00 2001 From: DarioSiroki Date: Sun, 1 Oct 2023 11:16:53 +0200 Subject: [PATCH 3/3] fix(queryClient): setQueryDefaults typings --- packages/query-core/src/queryClient.ts | 8 ++++---- packages/vue-query/src/queryClient.ts | 10 +++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/query-core/src/queryClient.ts b/packages/query-core/src/queryClient.ts index 630c415d501..a8d3e154eea 100644 --- a/packages/query-core/src/queryClient.ts +++ b/packages/query-core/src/queryClient.ts @@ -373,15 +373,15 @@ export class QueryClient { } setQueryDefaults< - TData = unknown, + TQueryFnData = unknown, TError = DefaultError, - TVariables = void, - TContext = unknown, + TData = TQueryFnData, + TQueryData = TQueryFnData, >( queryKey: QueryKey, options: Partial< Omit< - QueryObserverOptions, + QueryObserverOptions, 'queryKey' > >, diff --git a/packages/vue-query/src/queryClient.ts b/packages/vue-query/src/queryClient.ts index 88fac8e6c9f..130d37065dc 100644 --- a/packages/vue-query/src/queryClient.ts +++ b/packages/vue-query/src/queryClient.ts @@ -253,17 +253,13 @@ export class QueryClient extends QC { } setQueryDefaults< - TData = unknown, + TQueryFnData = unknown, TError = DefaultError, - TVariables = void, - TContext = unknown, + TData = TQueryFnData, >( queryKey: MaybeRefDeep, options: MaybeRefDeep< - Omit< - QueryObserverOptions, - 'queryKey' - > + Omit, 'queryKey'> >, ): void { super.setQueryDefaults(cloneDeepUnref(queryKey), cloneDeepUnref(options))