|
'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 || |
|
options.experimental_prefetchInRender |
|
) { |
|
|
|
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<TData, TError> |
|
errorResetBoundary: QueryErrorResetBoundaryValue |
|
throwOnError: ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey> |
|
query: Query<TQueryFnData, TError, TQueryData, TQueryKey> | undefined |
|
}) => { |
|
return ( |
|
result.isError && |
|
!errorResetBoundary.isReset() && |
|
!result.isFetching && |
|
query && |
|
shouldThrowError(throwOnError, [result.error, query]) |
|
) |
|
} |
|
|