(
{
queries,
...options
}: {
queries:
| readonly [...QueriesOptions<T>]
| readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries<T[K]> }]
combine?: (result: QueriesResults<T>) => TCombinedResult
subscribed?: boolean
},
queryClient?: QueryClient,
)
| 206 | : { [K in keyof T]: GetUseQueryResult<T[K]> } |
| 207 | |
| 208 | export function useQueries< |
| 209 | T extends Array<any>, |
| 210 | TCombinedResult = QueriesResults<T>, |
| 211 | >( |
| 212 | { |
| 213 | queries, |
| 214 | ...options |
| 215 | }: { |
| 216 | queries: |
| 217 | | readonly [...QueriesOptions<T>] |
| 218 | | readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries<T[K]> }] |
| 219 | combine?: (result: QueriesResults<T>) => TCombinedResult |
| 220 | subscribed?: boolean |
| 221 | }, |
| 222 | queryClient?: QueryClient, |
| 223 | ): TCombinedResult { |
| 224 | const client = useQueryClient(queryClient) |
| 225 | const isRestoring = useIsRestoring() |
| 226 | const errorResetBoundary = useQueryErrorResetBoundary() |
| 227 | |
| 228 | const defaultedQueries = React.useMemo( |
| 229 | () => |
| 230 | queries.map((opts) => { |
| 231 | const defaultedOptions = client.defaultQueryOptions( |
| 232 | opts as QueryObserverOptions, |
| 233 | ) |
| 234 | |
| 235 | // Make sure the results are already in fetching state before subscribing or updating options |
| 236 | defaultedOptions._optimisticResults = isRestoring |
| 237 | ? 'isRestoring' |
| 238 | : 'optimistic' |
| 239 | |
| 240 | return defaultedOptions |
| 241 | }), |
| 242 | [queries, client, isRestoring], |
| 243 | ) |
| 244 | |
| 245 | defaultedQueries.forEach((query) => { |
| 246 | ensureSuspenseTimers(query) |
| 247 | ensurePreventErrorBoundaryRetry(query, errorResetBoundary) |
| 248 | }) |
| 249 | |
| 250 | useClearResetErrorBoundary(errorResetBoundary) |
| 251 | |
| 252 | const [observer] = React.useState( |
| 253 | () => |
| 254 | new QueriesObserver<TCombinedResult>( |
| 255 | client, |
| 256 | defaultedQueries, |
| 257 | options as QueriesObserverOptions<TCombinedResult>, |
| 258 | ), |
| 259 | ) |
| 260 | |
| 261 | // note: this must be called before useSyncExternalStore |
| 262 | const [optimisticResult, getCombinedResult, trackResult] = |
| 263 | observer.getOptimisticResult( |
| 264 | defaultedQueries, |
| 265 | (options as QueriesObserverOptions<TCombinedResult>).combine, |
searching dependent graphs…