UNPKG

@tanstack/react-query

Version:

Hooks for managing, caching and syncing asynchronous and remote data in React

65 lines (59 loc) 1.79 kB
import type { DefaultError } from '@tanstack/query-core' import type { DefaultedQueryObserverOptions, Query, QueryKey, QueryObserver, QueryObserverResult, } from '@tanstack/query-core' import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary' export const defaultThrowOnError = < TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( _error: TError, query: Query<TQueryFnData, TError, TData, TQueryKey>, ) => typeof query.state.data === 'undefined' export const ensureStaleTime = ( defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>, ) => { if (defaultedOptions.suspense) { // Always set stale time when using suspense to prevent // fetching again when directly mounting after suspending if (typeof defaultedOptions.staleTime !== 'number') { defaultedOptions.staleTime = 1000 } } } export const willFetch = ( result: QueryObserverResult<any, any>, isRestoring: boolean, ) => result.isLoading && result.isFetching && !isRestoring export const shouldSuspend = ( defaultedOptions: | DefaultedQueryObserverOptions<any, any, any, any, any> | undefined, result: QueryObserverResult<any, any>, ) => defaultedOptions?.suspense && result.isPending export const fetchOptimistic = < TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey, >( defaultedOptions: DefaultedQueryObserverOptions< TQueryFnData, TError, TData, TQueryData, TQueryKey >, observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>, errorResetBoundary: QueryErrorResetBoundaryValue, ) => observer.fetchOptimistic(defaultedOptions).catch(() => { errorResetBoundary.clearReset() })