UNPKG

@tanstack/react-query

Version:

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

1 lines 6.63 kB
{"version":3,"file":"useBaseQuery.mjs","sources":["../../src/useBaseQuery.ts"],"sourcesContent":["import 'client-only'\nimport * 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'\nimport { ensureStaleTime, shouldSuspend, fetchOptimistic } from './suspense'\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 ensureStaleTime(defaultedOptions)\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 const unsubscribe = isRestoring\n ? () => undefined\n : observer.subscribe(notifyManager.batchCalls(onStoreChange))\n\n // Update result to make sure we did not miss any query updates\n // between creating the observer and subscribing to it.\n observer.updateResult()\n\n return unsubscribe\n },\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 (shouldSuspend(defaultedOptions, result, isRestoring)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\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","ensureStaleTime","ensurePreventErrorBoundaryRetry","useClearResetErrorBoundary","observer","React","useState","result","getOptimisticResult","useSyncExternalStore","useCallback","onStoreChange","unsubscribe","undefined","subscribe","updateResult","getCurrentResult","useEffect","setOptions","listeners","shouldSuspend","fetchOptimistic","getHasError","useErrorBoundary","query","getCurrentQuery","error","notifyOnChangeProps","trackResult"],"mappings":";;;;;;;;;AAiBO,SAASA,YAAT,CAOLC,OAPK,EAcLC,QAdK,EAeL;EACA,MAAMC,WAAW,GAAGC,cAAc,CAAC;IAAEC,OAAO,EAAEJ,OAAO,CAACI,OAAAA;AAAnB,GAAD,CAAlC,CAAA;EACA,MAAMC,WAAW,GAAGC,cAAc,EAAlC,CAAA;EACA,MAAMC,kBAAkB,GAAGC,0BAA0B,EAArD,CAAA;EACA,MAAMC,gBAAgB,GAAGP,WAAW,CAACQ,mBAAZ,CAAgCV,OAAhC,CAAzB,CAJA;;EAOAS,gBAAgB,CAACE,kBAAjB,GAAsCN,WAAW,GAC7C,aAD6C,GAE7C,YAFJ,CAPA;;EAYA,IAAII,gBAAgB,CAACG,OAArB,EAA8B;IAC5BH,gBAAgB,CAACG,OAAjB,GAA2BC,aAAa,CAACC,UAAd,CACzBL,gBAAgB,CAACG,OADQ,CAA3B,CAAA;AAGD,GAAA;;EAED,IAAIH,gBAAgB,CAACM,SAArB,EAAgC;IAC9BN,gBAAgB,CAACM,SAAjB,GAA6BF,aAAa,CAACC,UAAd,CAC3BL,gBAAgB,CAACM,SADU,CAA7B,CAAA;AAGD,GAAA;;EAED,IAAIN,gBAAgB,CAACO,SAArB,EAAgC;IAC9BP,gBAAgB,CAACO,SAAjB,GAA6BH,aAAa,CAACC,UAAd,CAC3BL,gBAAgB,CAACO,SADU,CAA7B,CAAA;AAGD,GAAA;;EAEDC,eAAe,CAACR,gBAAD,CAAf,CAAA;AACAS,EAAAA,+BAA+B,CAACT,gBAAD,EAAmBF,kBAAnB,CAA/B,CAAA;EAEAY,0BAA0B,CAACZ,kBAAD,CAA1B,CAAA;AAEA,EAAA,MAAM,CAACa,QAAD,CAAaC,GAAAA,KAAK,CAACC,QAAN,CACjB,MACE,IAAIrB,QAAJ,CACEC,WADF,EAEEO,gBAFF,CAFe,CAAnB,CAAA;AAQA,EAAA,MAAMc,MAAM,GAAGH,QAAQ,CAACI,mBAAT,CAA6Bf,gBAA7B,CAAf,CAAA;AAEAgB,EAAAA,oBAAoB,CAClBJ,KAAK,CAACK,WAAN,CACGC,aAAD,IAAmB;AACjB,IAAA,MAAMC,WAAW,GAAGvB,WAAW,GAC3B,MAAMwB,SADqB,GAE3BT,QAAQ,CAACU,SAAT,CAAmBjB,aAAa,CAACC,UAAd,CAAyBa,aAAzB,CAAnB,CAFJ,CADiB;AAMjB;;AACAP,IAAAA,QAAQ,CAACW,YAAT,EAAA,CAAA;AAEA,IAAA,OAAOH,WAAP,CAAA;AACD,GAXH,EAYE,CAACR,QAAD,EAAWf,WAAX,CAZF,CADkB,EAelB,MAAMe,QAAQ,CAACY,gBAAT,EAfY,EAgBlB,MAAMZ,QAAQ,CAACY,gBAAT,EAhBY,CAApB,CAAA;EAmBAX,KAAK,CAACY,SAAN,CAAgB,MAAM;AACpB;AACA;AACAb,IAAAA,QAAQ,CAACc,UAAT,CAAoBzB,gBAApB,EAAsC;AAAE0B,MAAAA,SAAS,EAAE,KAAA;KAAnD,CAAA,CAAA;AACD,GAJD,EAIG,CAAC1B,gBAAD,EAAmBW,QAAnB,CAJH,EAhEA;;EAuEA,IAAIgB,aAAa,CAAC3B,gBAAD,EAAmBc,MAAnB,EAA2BlB,WAA3B,CAAjB,EAA0D;AACxD,IAAA,MAAMgC,eAAe,CAAC5B,gBAAD,EAAmBW,QAAnB,EAA6Bb,kBAA7B,CAArB,CAAA;AACD,GAzED;;;AA4EA,EAAA,IACE+B,WAAW,CAAC;IACVf,MADU;IAEVhB,kBAFU;IAGVgC,gBAAgB,EAAE9B,gBAAgB,CAAC8B,gBAHzB;IAIVC,KAAK,EAAEpB,QAAQ,CAACqB,eAAT,EAAA;AAJG,GAAD,CADb,EAOE;IACA,MAAMlB,MAAM,CAACmB,KAAb,CAAA;AACD,GArFD;;;AAwFA,EAAA,OAAO,CAACjC,gBAAgB,CAACkC,mBAAlB,GACHvB,QAAQ,CAACwB,WAAT,CAAqBrB,MAArB,CADG,GAEHA,MAFJ,CAAA;AAGD;;;;"}