|
1 | 1 | import { readable } from 'svelte/store';
|
2 | 2 |
|
3 |
| -import { notifyManager, QueriesObserver, QueryClient, QueryKey } from "../queryCore/core"; |
| 3 | +import { notifyManager, QueriesObserver, QueryClient } from "../queryCore/core"; |
4 | 4 | import { useQueryClient } from "../queryClientProvider";
|
5 |
| -import type { UseQueryOptions, UseQueriesStoreResult } from "../types"; |
6 |
| - |
7 |
| -export default function useQueries< |
8 |
| - TQueryFnData = unknown, |
9 |
| - TError = unknown, |
10 |
| - TData = TQueryFnData, |
11 |
| - TQueryKey extends QueryKey = QueryKey |
12 |
| ->(queries: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]): UseQueriesStoreResult<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]>; |
13 |
| -export default function useQueries< |
14 |
| - TQueryFnData = unknown, |
15 |
| - TError = unknown, |
16 |
| - TData = TQueryFnData, |
17 |
| - TQueryKey extends QueryKey = QueryKey |
18 |
| ->(queries: []): UseQueriesStoreResult<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]>; |
19 |
| -export default function useQueries< |
20 |
| - T extends readonly [...UseQueryOptions[]] |
21 |
| ->(queries: T): UseQueriesStoreResult<T>; |
22 |
| -export default function useQueries< |
23 |
| - T extends readonly [...UseQueryOptions[]] |
24 |
| ->(queries: T): UseQueriesStoreResult<T> { |
| 5 | +import type { UseQueriesStoreResult, QueriesOptions, QueriesResults } from "../types"; |
| 6 | + |
| 7 | +export default function useQueries<T extends any[]>( |
| 8 | + queries: readonly [...QueriesOptions<T>] |
| 9 | +): UseQueriesStoreResult<T> { |
25 | 10 | const client: QueryClient = useQueryClient();
|
26 |
| - const observer = new QueriesObserver(client, queries); |
27 | 11 |
|
28 |
| - const { subscribe } = readable(observer.getCurrentResult(), (set) => { |
| 12 | + function getDefaultQuery(newQueries: readonly [...QueriesOptions<T>]) { |
| 13 | + return newQueries.map(options => { |
| 14 | + const defaultedOptions = client.defaultQueryObserverOptions( |
| 15 | + options |
| 16 | + ) |
| 17 | + // Make sure the results are already in fetching state before subscribing or updating options |
| 18 | + defaultedOptions.optimisticResults = true |
| 19 | + |
| 20 | + return defaultedOptions |
| 21 | + }) |
| 22 | + } |
| 23 | + |
| 24 | + const defaultedQueries = getDefaultQuery(queries) |
| 25 | + const observer = new QueriesObserver(client, defaultedQueries); |
| 26 | + |
| 27 | + const { subscribe } = readable((observer.getCurrentResult() as QueriesResults<T>), (set) => { |
29 | 28 | return observer.subscribe(notifyManager.batchCalls(set));
|
30 | 29 | });
|
31 | 30 |
|
32 |
| - const setQueries = (newQueries: T) => { |
| 31 | + const setQueries = (newQueries: readonly [...QueriesOptions<T>]) => { |
33 | 32 | if (observer.hasListeners()) {
|
34 |
| - observer.setQueries(newQueries) |
| 33 | + const defaultedNewQueries = getDefaultQuery(newQueries) |
| 34 | + observer.setQueries(defaultedNewQueries, { listeners: false }) |
35 | 35 | }
|
36 | 36 | }
|
37 | 37 |
|
|
0 commit comments