'use client' import * as React from 'react' import { shouldThrowError } from './utils' import type { DefaultedQueryObserverOptions, Query, QueryKey, QueryObserverResult, ThrowOnError, } from '@tanstack/query-core' import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary' export const ensurePreventErrorBoundaryRetry = < TQueryFnData, TError, TData, TQueryData, TQueryKey extends QueryKey, >( options: DefaultedQueryObserverOptions< TQueryFnData, TError, TData, TQueryData, TQueryKey >, errorResetBoundary: QueryErrorResetBoundaryValue, ) => { if (options.suspense || options.throwOnError) { // Prevent retrying failed query if the error boundary has not been reset yet if (!errorResetBoundary.isReset()) { options.retryOnMount = false } } } export const useClearResetErrorBoundary = ( errorResetBoundary: QueryErrorResetBoundaryValue, ) => { React.useEffect(() => { errorResetBoundary.clearReset() }, [errorResetBoundary]) } export const getHasError = < TData, TError, TQueryFnData, TQueryData, TQueryKey extends QueryKey, >({ result, errorResetBoundary, throwOnError, query, }: { result: QueryObserverResult errorResetBoundary: QueryErrorResetBoundaryValue throwOnError: ThrowOnError query: Query | undefined }) => { return ( result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && shouldThrowError(throwOnError, [result.error, query]) ) }