| 205 | : { [K in keyof T]: GetUseQueryResult<T[K]> } |
| 206 | |
| 207 | export function useQueries< |
| 208 | T extends Array<any>, |
| 209 | TCombinedResult = QueriesResults<T>, |
| 210 | >( |
| 211 | { |
| 212 | queries, |
| 213 | ...options |
| 214 | }: { |
| 215 | queries: |
| 216 | | readonly [...QueriesOptions<T>] |
| 217 | | readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries<T[K]> }] |
| 218 | combine?: (result: QueriesResults<T>) => TCombinedResult |
| 219 | subscribed?: boolean |
| 220 | }, |
| 221 | queryClient?: QueryClient, |
| 222 | ): TCombinedResult { |
| 223 | const client = useQueryClient(queryClient) |
| 224 | const isRestoring = useIsRestoring() |
| 225 | const errorResetBoundary = useQueryErrorResetBoundary() |
| 226 | |
| 227 | const defaultedQueries = useMemo( |
| 228 | () => |
| 229 | queries.map((opts) => { |
| 230 | const defaultedOptions = client.defaultQueryOptions( |
| 231 | opts as QueryObserverOptions, |
| 232 | ) |
| 233 | |
| 234 | // Make sure the results are already in fetching state before subscribing or updating options |
| 235 | defaultedOptions._optimisticResults = isRestoring |
| 236 | ? 'isRestoring' |
| 237 | : 'optimistic' |
| 238 | |
| 239 | return defaultedOptions |
| 240 | }), |
| 241 | [queries, client, isRestoring], |
| 242 | ) |
| 243 | |
| 244 | defaultedQueries.forEach((queryOptions) => { |
| 245 | ensureSuspenseTimers(queryOptions) |
| 246 | const query = client.getQueryCache().get(queryOptions.queryHash) |
| 247 | ensurePreventErrorBoundaryRetry(queryOptions, errorResetBoundary, query) |
| 248 | }) |
| 249 | |
| 250 | useClearResetErrorBoundary(errorResetBoundary) |
| 251 | |
| 252 | const [observer] = 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, |