UNPKG

@tanstack/react-query

Version:

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

1 lines 7.55 kB
{"version":3,"file":"useBaseQuery.mjs","sources":["../../src/useBaseQuery.ts"],"sourcesContent":["import * as React from 'react'\nimport { useSyncExternalStore } from './useSyncExternalStore'\n\nimport type { QueryKey, QueryObserver } from '@tanstack/query-core'\nimport { notifyManager } from '@tanstack/query-core'\nimport { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'\nimport { useQueryClient } from './QueryClientProvider'\nimport type { UseBaseQueryOptions } from './types'\nimport { useIsRestoring } from './isRestoring'\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary,\n} from './errorBoundaryUtils'\n\nexport function useBaseQuery<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey extends QueryKey,\n>(\n options: UseBaseQueryOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey\n >,\n Observer: typeof QueryObserver,\n) {\n const queryClient = useQueryClient({ context: options.context })\n const isRestoring = useIsRestoring()\n const errorResetBoundary = useQueryErrorResetBoundary()\n const defaultedOptions = queryClient.defaultQueryOptions(options)\n\n // Make sure results are optimistically set in fetching state before subscribing or updating options\n defaultedOptions._optimisticResults = isRestoring\n ? 'isRestoring'\n : 'optimistic'\n\n // Include callbacks in batch renders\n if (defaultedOptions.onError) {\n defaultedOptions.onError = notifyManager.batchCalls(\n defaultedOptions.onError,\n )\n }\n\n if (defaultedOptions.onSuccess) {\n defaultedOptions.onSuccess = notifyManager.batchCalls(\n defaultedOptions.onSuccess,\n )\n }\n\n if (defaultedOptions.onSettled) {\n defaultedOptions.onSettled = notifyManager.batchCalls(\n defaultedOptions.onSettled,\n )\n }\n\n if (defaultedOptions.suspense) {\n // Always set stale time when using suspense to prevent\n // fetching again when directly mounting after suspending\n if (typeof defaultedOptions.staleTime !== 'number') {\n defaultedOptions.staleTime = 1000\n }\n }\n\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)\n\n useClearResetErrorBoundary(errorResetBoundary)\n\n const [observer] = React.useState(\n () =>\n new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(\n queryClient,\n defaultedOptions,\n ),\n )\n\n const result = observer.getOptimisticResult(defaultedOptions)\n\n useSyncExternalStore(\n React.useCallback(\n (onStoreChange) =>\n isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer, isRestoring],\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult(),\n )\n\n React.useEffect(() => {\n // Do not notify on updates because of changes in the options because\n // these changes should already be reflected in the optimistic result.\n observer.setOptions(defaultedOptions, { listeners: false })\n }, [defaultedOptions, observer])\n\n // Handle suspense\n if (\n defaultedOptions.suspense &&\n result.isLoading &&\n result.isFetching &&\n !isRestoring\n ) {\n throw observer\n .fetchOptimistic(defaultedOptions)\n .then(({ data }) => {\n defaultedOptions.onSuccess?.(data as TData)\n defaultedOptions.onSettled?.(data, null)\n })\n .catch((error) => {\n errorResetBoundary.clearReset()\n defaultedOptions.onError?.(error)\n defaultedOptions.onSettled?.(undefined, error)\n })\n }\n\n // Handle error boundary\n if (\n getHasError({\n result,\n errorResetBoundary,\n useErrorBoundary: defaultedOptions.useErrorBoundary,\n query: observer.getCurrentQuery(),\n })\n ) {\n throw result.error\n }\n\n // Handle result property usage tracking\n return !defaultedOptions.notifyOnChangeProps\n ? observer.trackResult(result)\n : result\n}\n"],"names":["useBaseQuery","options","Observer","queryClient","useQueryClient","context","isRestoring","useIsRestoring","errorResetBoundary","useQueryErrorResetBoundary","defaultedOptions","defaultQueryOptions","_optimisticResults","onError","notifyManager","batchCalls","onSuccess","onSettled","suspense","staleTime","ensurePreventErrorBoundaryRetry","useClearResetErrorBoundary","observer","React","useState","result","getOptimisticResult","useSyncExternalStore","useCallback","onStoreChange","undefined","subscribe","getCurrentResult","useEffect","setOptions","listeners","isLoading","isFetching","fetchOptimistic","then","data","catch","error","clearReset","getHasError","useErrorBoundary","query","getCurrentQuery","notifyOnChangeProps","trackResult"],"mappings":"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"}