From 019ee7440fd920f1afceaa4518d44e6079a3fb2e Mon Sep 17 00:00:00 2001 From: Maxime LUCE Date: Sat, 4 Sep 2021 19:30:53 +0200 Subject: [PATCH 1/2] fix: update queryHash when queryKey is updated using updateOptions --- src/infiniteQuery/useInfiniteQuery.ts | 10 ++++++++-- src/query/useQuery.ts | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/infiniteQuery/useInfiniteQuery.ts b/src/infiniteQuery/useInfiniteQuery.ts index 047a838..4ce2a44 100644 --- a/src/infiniteQuery/useInfiniteQuery.ts +++ b/src/infiniteQuery/useInfiniteQuery.ts @@ -1,7 +1,7 @@ /* eslint-disable no-shadow */ import { readable } from 'svelte/store' -import { parseQueryArgs } from '../queryCore/core/utils' +import { hashQueryKeyByOptions, parseQueryArgs } from '../queryCore/core/utils' import { useQueryClient } from '../queryClientProvider' import { InfiniteQueryObserver } from '../queryCore/core/infiniteQueryObserver' import { notifyManager, QueryClient, QueryFunction, QueryKey } from '../queryCore/core' @@ -83,7 +83,13 @@ export default function useInfiniteQuery>): void { - observer.setOptions({ ...observer.options, ...options }) + const mergedOptions = { ...observer.options, ...options } + + if (options.queryKey && !options.queryHash && options.queryKey !== observer.options.queryKey) { + mergedOptions.queryHash = hashQueryKeyByOptions(options.queryKey, mergedOptions) + } + + observer.setOptions(mergedOptions) } function setEnabled(enabled: boolean): void { diff --git a/src/query/useQuery.ts b/src/query/useQuery.ts index 1591ebd..7c4879e 100644 --- a/src/query/useQuery.ts +++ b/src/query/useQuery.ts @@ -2,7 +2,7 @@ import { readable } from 'svelte/store' import { notifyManager, QueryObserver } from '../queryCore/core' -import { parseQueryArgs } from '../queryCore/core/utils' +import { hashQueryKeyByOptions, parseQueryArgs } from '../queryCore/core/utils' import { useQueryClient } from '../queryClientProvider' import type { QueryClient, QueryFunction, QueryKey } from '../queryCore/core' import type { UseQueryOptions, UseQueryStoreResult } from '../types' @@ -79,7 +79,13 @@ export default function useQuery>): void { - observer.setOptions({ ...observer.options, ...options }) + const mergedOptions = { ...observer.options, ...options } + + if (options.queryKey && !options.queryHash && options.queryKey !== observer.options.queryKey) { + mergedOptions.queryHash = hashQueryKeyByOptions(options.queryKey, mergedOptions) + } + + observer.setOptions(mergedOptions) } function setEnabled(enabled: boolean): void { From 9bd626e94376214c3b686ce4b3855be648b07ec7 Mon Sep 17 00:00:00 2001 From: Maxime LUCE Date: Sat, 4 Sep 2021 20:00:56 +0200 Subject: [PATCH 2/2] refactor: move updateOptions to QueryObserver --- src/infiniteQuery/useInfiniteQuery.ts | 10 ++-------- src/query/useQuery.ts | 10 ++-------- src/queryCore/core/queryObserver.ts | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/infiniteQuery/useInfiniteQuery.ts b/src/infiniteQuery/useInfiniteQuery.ts index 4ce2a44..0b3a362 100644 --- a/src/infiniteQuery/useInfiniteQuery.ts +++ b/src/infiniteQuery/useInfiniteQuery.ts @@ -1,7 +1,7 @@ /* eslint-disable no-shadow */ import { readable } from 'svelte/store' -import { hashQueryKeyByOptions, parseQueryArgs } from '../queryCore/core/utils' +import { parseQueryArgs } from '../queryCore/core/utils' import { useQueryClient } from '../queryClientProvider' import { InfiniteQueryObserver } from '../queryCore/core/infiniteQueryObserver' import { notifyManager, QueryClient, QueryFunction, QueryKey } from '../queryCore/core' @@ -83,13 +83,7 @@ export default function useInfiniteQuery>): void { - const mergedOptions = { ...observer.options, ...options } - - if (options.queryKey && !options.queryHash && options.queryKey !== observer.options.queryKey) { - mergedOptions.queryHash = hashQueryKeyByOptions(options.queryKey, mergedOptions) - } - - observer.setOptions(mergedOptions) + observer.updateOptions(options) } function setEnabled(enabled: boolean): void { diff --git a/src/query/useQuery.ts b/src/query/useQuery.ts index 7c4879e..44e92c3 100644 --- a/src/query/useQuery.ts +++ b/src/query/useQuery.ts @@ -2,7 +2,7 @@ import { readable } from 'svelte/store' import { notifyManager, QueryObserver } from '../queryCore/core' -import { hashQueryKeyByOptions, parseQueryArgs } from '../queryCore/core/utils' +import { parseQueryArgs } from '../queryCore/core/utils' import { useQueryClient } from '../queryClientProvider' import type { QueryClient, QueryFunction, QueryKey } from '../queryCore/core' import type { UseQueryOptions, UseQueryStoreResult } from '../types' @@ -79,13 +79,7 @@ export default function useQuery>): void { - const mergedOptions = { ...observer.options, ...options } - - if (options.queryKey && !options.queryHash && options.queryKey !== observer.options.queryKey) { - mergedOptions.queryHash = hashQueryKeyByOptions(options.queryKey, mergedOptions) - } - - observer.setOptions(mergedOptions) + observer.updateOptions(options) } function setEnabled(enabled: boolean): void { diff --git a/src/queryCore/core/queryObserver.ts b/src/queryCore/core/queryObserver.ts index 8eb005f..4c794d5 100644 --- a/src/queryCore/core/queryObserver.ts +++ b/src/queryCore/core/queryObserver.ts @@ -1,4 +1,5 @@ import { + hashQueryKeyByOptions, isServer, isValidTimeout, noop, @@ -196,6 +197,25 @@ export class QueryObserver< } } + updateOptions( + options?: Partial>, + notifyOptions?: NotifyOptions + ): void { + const mergedOptions = { ...this.options, ...options } + + if (options.queryKey && !options.queryHash && options.queryKey !== this.options.queryKey) { + mergedOptions.queryHash = hashQueryKeyByOptions(options.queryKey, mergedOptions) + } + + this.setOptions(mergedOptions, notifyOptions) + } + getOptimisticResult( options: QueryObserverOptions< TQueryFnData,