Skip to content

Commit 2d98bf2

Browse files
committed
feat: use set defaults also for observers
1 parent 81299ff commit 2d98bf2

File tree

3 files changed

+46
-14
lines changed

3 files changed

+46
-14
lines changed

src/core/queryClient.ts

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import type {
1313
InvalidateOptions,
1414
InvalidateQueryFilters,
1515
MutationKey,
16+
MutationObserverOptions,
1617
MutationOptions,
1718
QueryFunction,
1819
QueryKey,
@@ -302,7 +303,7 @@ export class QueryClient {
302303

303304
setQueryDefaults(
304305
queryKey: QueryKey,
305-
options: QueryOptions<any, any, any>
306+
options: QueryObserverOptions<any, any, any, any>
306307
): void {
307308
const result = this.queryDefaults.find(
308309
x => hashQueryKey(queryKey) === hashQueryKey(x.queryKey)
@@ -315,15 +316,17 @@ export class QueryClient {
315316
}
316317

317318
getQueryDefaults(
318-
queryKey: QueryKey
319-
): QueryOptions<any, any, any> | undefined {
320-
return this.queryDefaults.find(x => partialMatchKey(queryKey, x.queryKey))
321-
?.defaultOptions
319+
queryKey?: QueryKey
320+
): QueryObserverOptions<any, any, any> | undefined {
321+
return queryKey
322+
? this.queryDefaults.find(x => partialMatchKey(queryKey, x.queryKey))
323+
?.defaultOptions
324+
: undefined
322325
}
323326

324327
setMutationDefaults(
325328
mutationKey: MutationKey,
326-
options: MutationOptions<any, any, any, any>
329+
options: MutationObserverOptions<any, any, any, any>
327330
): void {
328331
const result = this.mutationDefaults.find(
329332
x => hashQueryKey(mutationKey) === hashQueryKey(x.mutationKey)
@@ -336,27 +339,45 @@ export class QueryClient {
336339
}
337340

338341
getMutationDefaults(
339-
mutationKey: MutationKey
340-
): MutationOptions<any, any, any, any> | undefined {
341-
return this.mutationDefaults.find(x =>
342-
partialMatchKey(mutationKey, x.mutationKey)
343-
)?.defaultOptions
342+
mutationKey?: MutationKey
343+
): MutationObserverOptions<any, any, any, any> | undefined {
344+
return mutationKey
345+
? this.mutationDefaults.find(x =>
346+
partialMatchKey(mutationKey, x.mutationKey)
347+
)?.defaultOptions
348+
: undefined
344349
}
345350

346351
defaultQueryOptions<T extends QueryOptions<any, any>>(options?: T): T {
347-
return { ...this.defaultOptions.queries, ...options } as T
352+
if (options?._defaulted) {
353+
return options
354+
}
355+
return {
356+
...this.defaultOptions.queries,
357+
...this.getQueryDefaults(options?.queryKey),
358+
...options,
359+
_defaulted: true,
360+
} as T
348361
}
349362

350363
defaultQueryObserverOptions<T extends QueryObserverOptions<any, any>>(
351364
options?: T
352365
): T {
353-
return { ...this.defaultOptions.queries, ...options } as T
366+
return this.defaultQueryOptions(options)
354367
}
355368

356369
defaultMutationOptions<T extends MutationOptions<any, any, any, any>>(
357370
options?: T
358371
): T {
359-
return { ...this.defaultOptions.mutations, ...options } as T
372+
if (options?._defaulted) {
373+
return options
374+
}
375+
return {
376+
...this.defaultOptions.mutations,
377+
...this.getMutationDefaults(options?.mutationKey),
378+
...options,
379+
_defaulted: true,
380+
} as T
360381
}
361382

362383
clear(): void {

src/core/tests/queryCache.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ describe('queryCache', () => {
6060
consoleMock.mockRestore()
6161
})
6262

63+
test('setQueryDefaults should also set defaults for observers', async () => {
64+
const key = queryKey()
65+
queryClient.setQueryDefaults(key, { queryFn: () => 'data', enabled: false })
66+
const observer = new QueryObserver(queryClient, {
67+
queryKey: [key],
68+
})
69+
expect(observer.getCurrentResult().status).toBe('idle')
70+
})
71+
6372
test('setQueryData does not crash if query could not be found', () => {
6473
const key = queryKey()
6574

src/core/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export interface QueryOptions<
6767
* The result will also be used to determine the value of `hasNextPage`.
6868
*/
6969
getNextPageParam?: GetNextPageParamFunction<TQueryFnData>
70+
_defaulted?: boolean
7071
}
7172

7273
export interface QueryObserverOptions<
@@ -288,6 +289,7 @@ export interface MutationOptions<
288289
) => Promise<void> | void
289290
retry?: RetryValue<TError>
290291
retryDelay?: RetryDelayValue
292+
_defaulted?: boolean
291293
}
292294

293295
export interface MutationObserverOptions<

0 commit comments

Comments
 (0)