react-query
Version:
Hooks for managing, caching and syncing asynchronous and remote data in React
1 lines • 48.6 kB
Source Map (JSON)
{"version":3,"file":"react-query.min.mjs","sources":["../src/utils.js","../src/config.js","../src/queryCache.js","../src/setFocusHandler.js","../src/useIsFetching.js","../src/useMutation.js","../src/useBaseQuery.js","../src/useQuery.js","../src/usePaginatedQuery.js","../src/useInfiniteQuery.js"],"sourcesContent":["import React from 'react'\n\n//\n\nexport const statusIdle = 'idle'\nexport const statusLoading = 'loading'\nexport const statusError = 'error'\nexport const statusSuccess = 'success'\n\nlet _uid = 0\nexport const uid = () => _uid++\nexport const cancelledError = {}\nexport let globalStateListeners = []\nexport const isServer = typeof window === 'undefined'\nexport const noop = () => {}\nexport const identity = d => d\nexport let Console = console || { error: noop, warn: noop, log: noop }\n\nexport function useUid() {\n const ref = React.useRef(null)\n\n if (ref.current === null) {\n ref.current = uid()\n }\n\n return ref.current\n}\n\nexport function setConsole(c) {\n Console = c\n}\n\nexport function useGetLatest(obj) {\n const ref = React.useRef()\n ref.current = obj\n\n return React.useCallback(() => ref.current, [])\n}\n\nexport function functionalUpdate(updater, old) {\n return typeof updater === 'function' ? updater(old) : updater\n}\n\nexport function stableStringifyReplacer(_, value) {\n return isObject(value)\n ? Object.assign(\n {},\n ...Object.keys(value)\n .sort()\n .map(key => ({\n [key]: value[key],\n }))\n )\n : value\n}\n\nexport function stableStringify(obj) {\n return JSON.stringify(obj, stableStringifyReplacer)\n}\n\nexport function isObject(a) {\n return a && typeof a === 'object' && !Array.isArray(a)\n}\n\nexport function deepIncludes(a, b) {\n if (typeof a !== typeof b) {\n return false\n }\n\n if (typeof a === 'object') {\n return !Object.keys(b).some(key => !deepIncludes(a[key], b[key]))\n }\n\n return a === b\n}\n\nexport function isDocumentVisible() {\n return (\n typeof document === 'undefined' ||\n document.visibilityState === undefined ||\n document.visibilityState === 'visible' ||\n document.visibilityState === 'prerender'\n )\n}\n\nexport function isOnline() {\n return navigator.onLine === undefined || navigator.onLine\n}\n\nexport function getQueryArgs(args) {\n if (isObject(args[0])) {\n if (\n args[0].hasOwnProperty('queryKey') &&\n args[0].hasOwnProperty('queryFn')\n ) {\n const { queryKey, variables = [], queryFn, config = {} } = args[0]\n return [queryKey, variables, queryFn, config]\n } else {\n throw new Error('queryKey and queryFn keys are required.')\n }\n }\n if (typeof args[2] === 'function') {\n const [queryKey, variables = [], queryFn, config = {}] = args\n return [queryKey, variables, queryFn, config]\n }\n\n const [queryKey, queryFn, config = {}] = args\n\n return [queryKey, [], queryFn, config]\n}\n\nexport function useMountedCallback(callback) {\n const mounted = React.useRef(false)\n React[isServer ? 'useEffect' : 'useLayoutEffect'](() => {\n mounted.current = true\n return () => (mounted.current = false)\n }, [])\n return React.useCallback(\n (...args) => (mounted.current ? callback(...args) : void 0),\n [callback]\n )\n}\n","import React from 'react'\nimport { noop, stableStringify, identity } from './utils'\n\nexport const configContext = React.createContext()\n\nexport const defaultConfigRef = {\n current: {\n retry: 3,\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),\n staleTime: 0,\n cacheTime: 5 * 60 * 1000,\n refetchAllOnWindowFocus: true,\n refetchInterval: false,\n suspense: false,\n queryKeySerializerFn: defaultQueryKeySerializerFn,\n queryFnParamsFilter: identity,\n throwOnError: false,\n useErrorBoundary: undefined, // this will default to the suspense value\n onSuccess: noop,\n onError: noop,\n onSettled: noop,\n refetchOnMount: true,\n },\n}\n\nexport function useConfigContext() {\n return React.useContext(configContext) || defaultConfigRef.current\n}\n\nexport function ReactQueryConfigProvider({ config, children }) {\n let configContextValue = React.useContext(configContext)\n\n const newConfig = React.useMemo(() => {\n const newConfig = {\n ...(configContextValue || defaultConfigRef.current),\n ...config,\n }\n\n // Default useErrorBoundary to the suspense value\n if (typeof newConfig.useErrorBoundary === 'undefined') {\n newConfig.useErrorBoundary = newConfig.suspense\n }\n\n return newConfig\n }, [config, configContextValue])\n\n if (!configContextValue) {\n defaultConfigRef.current = newConfig\n }\n\n return (\n <configContext.Provider value={newConfig}>\n {children}\n </configContext.Provider>\n )\n}\n\nexport function defaultQueryKeySerializerFn(queryKey) {\n if (!queryKey) {\n return []\n }\n\n if (typeof queryKey === 'function') {\n try {\n return defaultQueryKeySerializerFn(queryKey())\n } catch {\n return []\n }\n }\n\n if (typeof queryKey === 'string') {\n queryKey = [queryKey]\n }\n\n const queryHash = stableStringify(queryKey)\n queryKey = JSON.parse(queryHash)\n\n return [queryHash, queryKey]\n}\n","import {\n isServer,\n functionalUpdate,\n cancelledError,\n isDocumentVisible,\n statusLoading,\n statusSuccess,\n statusError,\n getQueryArgs,\n deepIncludes,\n noop,\n} from './utils'\nimport { defaultConfigRef } from './config'\n\nexport const queryCache = makeQueryCache()\n\nconst actionInit = {}\nconst actionFailed = {}\nconst actionMarkStale = {}\nconst actionFetch = {}\nconst actionSuccess = {}\nconst actionError = {}\n\nexport function makeQueryCache() {\n const listeners = []\n\n const cache = {\n queries: {},\n isFetching: 0,\n }\n\n const notifyGlobalListeners = () => {\n cache.isFetching = Object.values(queryCache.queries).reduce(\n (acc, query) => (query.state.isFetching ? acc + 1 : acc),\n 0\n )\n listeners.forEach(d => d(cache))\n }\n\n cache.subscribe = cb => {\n listeners.push(cb)\n return () => {\n listeners.splice(listeners.indexOf(cb), 1)\n }\n }\n\n cache.clear = () => {\n cache.queries = {}\n notifyGlobalListeners()\n }\n\n const findQueries = (predicate, { exact } = {}) => {\n if (typeof predicate !== 'function') {\n const [\n queryHash,\n queryKey,\n ] = defaultConfigRef.current.queryKeySerializerFn(predicate)\n predicate = d =>\n exact ? d.queryHash === queryHash : deepIncludes(d.queryKey, queryKey)\n }\n\n return Object.values(cache.queries).filter(predicate)\n }\n\n cache.getQueries = findQueries\n\n cache.getQuery = queryKey => findQueries(queryKey, { exact: true })[0]\n\n cache.getQueryData = queryKey => cache.getQuery(queryKey)?.state.data\n\n cache.removeQueries = (predicate, { exact } = {}) => {\n const foundQueries = findQueries(predicate, { exact })\n\n foundQueries.forEach(query => {\n clearTimeout(query.staleTimeout)\n delete cache.queries[query.queryHash]\n })\n\n if (foundQueries.length) {\n notifyGlobalListeners()\n }\n }\n\n cache.refetchQueries = async (\n predicate,\n { exact, throwOnError, force } = {}\n ) => {\n const foundQueries =\n predicate === true\n ? Object.values(cache.queries)\n : findQueries(predicate, { exact })\n\n try {\n return await Promise.all(\n foundQueries.map(query => query.fetch({ force }))\n )\n } catch (err) {\n if (throwOnError) {\n throw err\n }\n }\n }\n\n cache._buildQuery = (userQueryKey, queryVariables, queryFn, config) => {\n let [queryHash, queryKey] = config.queryKeySerializerFn(userQueryKey)\n\n let query = cache.queries[queryHash]\n\n if (query) {\n Object.assign(query, { queryVariables, queryFn })\n Object.assign(query.config, config)\n } else {\n query = makeQuery({\n queryKey,\n queryHash,\n queryVariables,\n queryFn,\n config,\n })\n\n // If the query started with data, schedule\n // a stale timeout\n if (query.state.data) {\n query.scheduleStaleTimeout()\n\n // Simulate a query healing process\n query.heal()\n // Schedule for garbage collection in case\n // nothing subscribes to this query\n query.scheduleGarbageCollection()\n }\n\n if (query.queryHash) {\n if (!isServer) {\n cache.queries[queryHash] = query\n notifyGlobalListeners()\n }\n }\n }\n\n return query\n }\n\n cache.prefetchQuery = async (...args) => {\n let [\n queryKey,\n queryVariables,\n queryFn,\n { force, ...config },\n ] = getQueryArgs(args)\n\n config = {\n ...defaultConfigRef.current,\n ...config,\n }\n\n const query = cache._buildQuery(queryKey, queryVariables, queryFn, config)\n\n // Don't prefetch queries that are fresh, unless force is passed\n if (query.state.isStale || force) {\n // Trigger a fetch and return the promise\n try {\n const res = await query.fetch()\n query.wasPrefetched = true\n return res\n } catch (err) {\n if (config.throwOnError) {\n throw err\n }\n }\n }\n\n return query.state.data\n }\n\n cache.setQueryData = (queryKey, updater, { exact, ...config } = {}) => {\n let queries = findQueries(queryKey, { exact })\n\n if (!queries.length && typeof queryKey !== 'function') {\n queries = [\n cache._buildQuery(queryKey, undefined, () => new Promise(noop), {\n ...defaultConfigRef.current,\n ...config,\n }),\n ]\n }\n\n queries.forEach(d => d.setData(updater))\n }\n\n function makeQuery(options) {\n const reducer = options.config.queryReducer || defaultQueryReducer\n\n const noQueryHash = typeof options.queryHash === 'undefined'\n\n const initialData =\n typeof options.config.initialData === 'function'\n ? options.config.initialData()\n : options.config.initialData\n\n const hasInitialData = typeof initialData !== 'undefined'\n\n const isStale = noQueryHash ? true : !hasInitialData\n\n const manual = options.config.manual\n\n const initialStatus =\n noQueryHash || manual || hasInitialData ? statusSuccess : statusLoading\n\n const query = {\n ...options,\n instances: [],\n state: reducer(undefined, {\n type: actionInit,\n initialStatus,\n initialData,\n hasInitialData,\n isStale,\n manual,\n }),\n }\n\n const dispatch = action => {\n query.state = reducer(query.state, action)\n query.instances.forEach(d => d.onStateUpdate(query.state))\n notifyGlobalListeners()\n }\n\n query.scheduleStaleTimeout = () => {\n if (query.config.staleTime === Infinity) {\n return\n }\n query.staleTimeout = setTimeout(() => {\n dispatch({ type: actionMarkStale })\n }, query.config.staleTime)\n }\n\n query.scheduleGarbageCollection = () => {\n query.cacheTimeout = setTimeout(\n () => {\n cache.removeQueries(d => d.queryHash === query.queryHash)\n },\n typeof query.state.data === 'undefined' &&\n query.state.status !== 'error'\n ? 0\n : query.config.cacheTime\n )\n }\n\n query.heal = () => {\n // Stop the query from being garbage collected\n clearTimeout(query.cacheTimeout)\n\n // Mark the query as not cancelled\n query.cancelled = null\n }\n\n query.subscribe = instance => {\n let found = query.instances.find(d => d.id === instance.id)\n\n if (found) {\n Object.assign(found, instance)\n } else {\n found = {\n onStateUpdate: noop,\n ...instance,\n }\n query.instances.push(instance)\n }\n\n query.heal()\n\n // Return the unsubscribe function\n return () => {\n query.instances = query.instances.filter(d => d.id !== instance.id)\n\n if (!query.instances.length) {\n // Cancel any side-effects\n query.cancelled = cancelledError\n\n if (query.cancelQueries) {\n query.cancelQueries()\n }\n\n // Schedule garbage collection\n query.scheduleGarbageCollection()\n }\n }\n }\n\n // Set up the fetch function\n const tryFetchData = async (queryFn, ...args) => {\n try {\n // Perform the query\n const promise = queryFn(...query.config.queryFnParamsFilter(args))\n\n query.cancelQueries = () => promise.cancel?.()\n\n const data = await promise\n\n delete query.cancelQueries\n if (query.cancelled) throw query.cancelled\n\n return data\n } catch (error) {\n delete query.cancelQueries\n if (query.cancelled) throw query.cancelled\n\n // If we fail, increase the failureCount\n dispatch({ type: actionFailed })\n\n // Do we need to retry the request?\n if (\n // Only retry if the document is visible\n query.config.retry === true ||\n query.state.failureCount <= query.config.retry\n ) {\n if (!isDocumentVisible()) {\n // set this flag to continue fetch retries on focus\n query.shouldContinueRetryOnFocus = true\n return new Promise(noop)\n }\n\n delete query.shouldContinueRetryOnFocus\n\n // Determine the retryDelay\n const delay = functionalUpdate(\n query.config.retryDelay,\n query.state.failureCount\n )\n\n // Return a new promise with the retry\n return await new Promise((resolve, reject) => {\n // Keep track of the retry timeout\n setTimeout(async () => {\n if (query.cancelled) return reject(query.cancelled)\n\n try {\n const data = await tryFetchData(queryFn, ...args)\n if (query.cancelled) return reject(query.cancelled)\n resolve(data)\n } catch (error) {\n if (query.cancelled) return reject(query.cancelled)\n reject(error)\n }\n }, delay)\n })\n }\n\n throw error\n }\n }\n\n query.fetch = async ({ force, __queryFn = query.queryFn } = {}) => {\n // Don't refetch fresh queries that don't have a queryHash\n\n if (!query.queryHash || (!query.state.isStale && !force)) {\n return\n }\n\n // Create a new promise for the query cache if necessary\n if (!query.promise) {\n query.promise = (async () => {\n // If there are any retries pending for this query, kill them\n query.cancelled = null\n\n try {\n // Set up the query refreshing state\n dispatch({ type: actionFetch })\n\n // Try to fetch\n let data = await tryFetchData(\n __queryFn,\n ...query.queryKey,\n ...query.queryVariables\n )\n\n query.setData(data)\n\n query.instances.forEach(\n instance =>\n instance.onSuccess && instance.onSuccess(query.state.data)\n )\n\n query.instances.forEach(\n instance =>\n instance.onSettled && instance.onSettled(query.state.data, null)\n )\n\n delete query.promise\n\n return data\n } catch (error) {\n dispatch({\n type: actionError,\n cancelled: error === query.cancelled,\n error,\n })\n\n delete query.promise\n\n if (error !== query.cancelled) {\n query.instances.forEach(\n instance => instance.onError && instance.onError(error)\n )\n\n query.instances.forEach(\n instance =>\n instance.onSettled && instance.onSettled(undefined, error)\n )\n\n // throw error\n }\n }\n })()\n }\n\n return query.promise\n }\n\n query.setData = updater => {\n // Set data and mark it as cached\n dispatch({ type: actionSuccess, updater })\n\n // Schedule a fresh invalidation!\n clearTimeout(query.staleTimeout)\n query.scheduleStaleTimeout()\n }\n\n return query\n }\n\n return cache\n}\n\nexport function defaultQueryReducer(state, action) {\n switch (action.type) {\n case actionInit:\n return {\n status: action.initialStatus,\n error: null,\n isFetching: action.hasInitialData ? false : !action.manual,\n canFetchMore: false,\n failureCount: 0,\n isStale: action.isStale,\n data: action.initialData,\n updatedAt: action.hasInitialData ? Date.now() : 0,\n }\n case actionFailed:\n return {\n ...state,\n failureCount: state.failureCount + 1,\n }\n case actionMarkStale:\n return {\n ...state,\n isStale: true,\n }\n case actionFetch:\n return {\n ...state,\n status: state.status === statusError ? statusLoading : state.status,\n isFetching: true,\n failureCount: 0,\n }\n case actionSuccess:\n return {\n ...state,\n status: statusSuccess,\n data: functionalUpdate(action.updater, state.data),\n error: null,\n isStale: false,\n isFetching: false,\n canFetchMore: action.canFetchMore,\n updatedAt: Date.now(),\n failureCount: 0,\n }\n case actionError:\n return {\n ...state,\n isFetching: false,\n ...(!action.cancelled && {\n status: statusError,\n error: action.error,\n isStale: true,\n }),\n }\n default:\n throw new Error()\n }\n}\n","import { isOnline, isDocumentVisible, Console, isServer } from './utils'\nimport { defaultConfigRef } from './config'\nimport { queryCache } from './queryCache'\n\nconst visibilityChangeEvent = 'visibilitychange'\nconst focusEvent = 'focus'\n\nconst onWindowFocus = () => {\n const { refetchAllOnWindowFocus } = defaultConfigRef.current\n\n if (isDocumentVisible() && isOnline()) {\n queryCache\n .refetchQueries(query => {\n if (!query.instances.length) {\n return false\n }\n\n if (query.shouldContinueRetryOnFocus) {\n // delete promise, so `fetch` will create new one\n delete query.promise\n return true\n }\n\n if (typeof query.config.refetchOnWindowFocus === 'undefined') {\n return refetchAllOnWindowFocus\n } else {\n return query.config.refetchOnWindowFocus\n }\n })\n .catch(Console.error)\n }\n}\n\nlet removePreviousHandler\n\nexport function setFocusHandler(callback) {\n // Unsub the old watcher\n if (removePreviousHandler) {\n removePreviousHandler()\n }\n // Sub the new watcher\n removePreviousHandler = callback(onWindowFocus)\n}\n\nsetFocusHandler(handleFocus => {\n // Listen to visibillitychange and focus\n if (!isServer && window?.addEventListener) {\n window.addEventListener(visibilityChangeEvent, handleFocus, false)\n window.addEventListener(focusEvent, handleFocus, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener(visibilityChangeEvent, handleFocus)\n window.removeEventListener(focusEvent, handleFocus)\n }\n }\n})\n","import React from 'react'\n\nimport { queryCache } from './queryCache'\n\nexport function useIsFetching() {\n const [state, setState] = React.useState({})\n\n React.useEffect(() => {\n return queryCache.subscribe(() => setState({}))\n }, [])\n\n return React.useMemo(() => state && queryCache.isFetching, [state])\n}\n","import React from 'react'\n\n//\n\nimport { useConfigContext } from './config'\nimport {\n statusIdle,\n statusLoading,\n statusSuccess,\n statusError,\n useGetLatest,\n Console,\n uid,\n useMountedCallback,\n} from './utils'\n\nconst getDefaultState = () => ({\n status: statusIdle,\n data: undefined,\n error: null,\n})\n\nconst actionReset = {}\nconst actionLoading = {}\nconst actionResolve = {}\nconst actionReject = {}\n\nfunction mutationReducer(state, action) {\n if (action.type === actionReset) {\n return getDefaultState()\n } else if (action.type === actionLoading) {\n return {\n status: statusLoading,\n }\n } else if (state.status === statusLoading && action.type === actionResolve) {\n return {\n status: statusSuccess,\n data: action.data,\n }\n } else if (state.status === statusLoading && action.type === actionReject) {\n return {\n status: statusError,\n error: action.error,\n }\n } else {\n throw new Error()\n }\n}\n\nexport function useMutation(mutationFn, config = {}) {\n const [state, unsafeDispatch] = React.useReducer(\n mutationReducer,\n null,\n getDefaultState\n )\n\n const dispatch = useMountedCallback(unsafeDispatch)\n\n const getMutationFn = useGetLatest(mutationFn)\n\n const getConfig = useGetLatest({\n ...useConfigContext(),\n ...config,\n })\n\n const latestMutationRef = React.useRef()\n\n const mutate = React.useCallback(\n async (variables, options = {}) => {\n const resolvedOptions = {\n ...getConfig(),\n ...options,\n }\n\n const mutationId = uid()\n latestMutationRef.current = mutationId\n\n dispatch({ type: actionLoading })\n\n try {\n const data = await getMutationFn()(variables)\n await resolvedOptions.onSuccess(data)\n await resolvedOptions.onSettled(data, null)\n\n if (latestMutationRef.current === mutationId) {\n dispatch({ type: actionResolve, data })\n }\n\n return data\n } catch (error) {\n Console.error(error)\n await resolvedOptions.onError(error)\n await resolvedOptions.onSettled(undefined, error)\n\n if (latestMutationRef.current === mutationId) {\n dispatch({ type: actionReject, error })\n }\n\n if (resolvedOptions.throwOnError) {\n throw error\n }\n }\n },\n [dispatch, getConfig, getMutationFn]\n )\n\n const reset = React.useCallback(() => dispatch({ type: actionReset }), [\n dispatch,\n ])\n\n React.useEffect(() => {\n if (getConfig().useErrorBoundary && state.error) {\n throw state.error\n }\n }, [getConfig, state.error])\n\n return [mutate, { ...state, reset }]\n}\n","import React from 'react'\n\n//\n\nimport { queryCache } from './queryCache'\nimport { useConfigContext } from './config'\nimport {\n useUid,\n isDocumentVisible,\n Console,\n useGetLatest,\n useMountedCallback,\n} from './utils'\n\nexport function useBaseQuery(queryKey, queryVariables, queryFn, config = {}) {\n const instanceId = useUid()\n\n config = {\n ...useConfigContext(),\n ...config,\n }\n\n const queryRef = React.useRef()\n\n const newQuery = queryCache._buildQuery(\n queryKey,\n queryVariables,\n queryFn,\n config\n )\n\n const useCachedQuery =\n queryRef.current &&\n typeof queryRef.current.queryHash === 'undefined' &&\n typeof newQuery.queryHash === 'undefined'\n\n // Do not use new query with undefined queryHash, if previous query also had undefined queryHash.\n // Otherwise this will cause infinite loop.\n if (!useCachedQuery) {\n queryRef.current = newQuery\n }\n\n const query = queryRef.current\n\n const [, unsafeRerender] = React.useState()\n\n const rerender = useMountedCallback(unsafeRerender)\n\n const getLatestConfig = useGetLatest(config)\n const refetch = React.useCallback(\n async ({ throwOnError, ...rest } = {}) => {\n try {\n return await query.fetch(rest)\n } catch (err) {\n if (throwOnError) {\n throw err\n }\n }\n },\n [query]\n )\n\n // Subscribe to the query and maybe trigger fetch\n React.useEffect(() => {\n const unsubscribeFromQuery = query.subscribe({\n id: instanceId,\n onStateUpdate: () => rerender({}),\n onSuccess: data => getLatestConfig().onSuccess(data),\n onError: err => getLatestConfig().onError(err),\n onSettled: (data, err) => getLatestConfig().onSettled(data, err),\n })\n\n // Perform the initial fetch for this query if necessary\n if (\n !getLatestConfig().manual && // Don't auto fetch if config is set to manual query\n !query.wasPrefetched && // Don't double fetch for prefetched queries\n !query.wasSuspensed && // Don't double fetch for suspense\n query.state.isStale && // Only refetch if stale\n (getLatestConfig().refetchOnMount || query.instances.length === 1)\n ) {\n refetch().catch(Console.error)\n }\n\n query.wasPrefetched = false\n query.wasSuspensed = false\n\n return unsubscribeFromQuery\n }, [getLatestConfig, instanceId, query, refetch, rerender])\n\n // Handle refetch interval\n React.useEffect(() => {\n if (\n config.refetchInterval &&\n (!query.refetchInterval || config.refetchInterval < query.refetchInterval)\n ) {\n clearInterval(query.refetchInterval)\n query.refetchInterval = setInterval(() => {\n if (isDocumentVisible() || config.refetchIntervalInBackground) {\n refetch().catch(Console.error)\n }\n }, config.refetchInterval)\n\n return () => {\n clearInterval(query.refetchInterval)\n delete query.refetchInterval\n }\n }\n }, [\n config.refetchInterval,\n config.refetchIntervalInBackground,\n query.refetchInterval,\n refetch,\n ])\n\n return {\n ...query.state,\n config,\n query,\n refetch,\n }\n}\n","import { useBaseQuery } from './useBaseQuery'\nimport { getQueryArgs, statusError, statusLoading } from './utils'\n\nexport function useQuery(...args) {\n const query = useBaseQuery(...getQueryArgs(args))\n\n if (query.config.suspense) {\n if (query.status === statusError) {\n throw query.error\n }\n if (query.status === statusLoading) {\n query.wasSuspensed = true\n throw query.refetch()\n }\n }\n\n return query\n}\n","import React from 'react'\n\n//\n\nimport { useBaseQuery } from './useBaseQuery'\nimport { getQueryArgs, statusError, statusLoading } from './utils'\n\nexport function usePaginatedQuery(...args) {\n let [queryKey, queryVariables, queryFn, config = {}] = getQueryArgs(args)\n\n const lastDataRef = React.useRef()\n\n // If latestData is set, don't use initialData\n if (typeof lastDataRef.current !== 'undefined') {\n delete config.initialData\n }\n\n const query = useBaseQuery(queryKey, queryVariables, queryFn, config)\n\n let { data: latestData, status } = query\n\n React.useEffect(() => {\n if (status === 'success' && typeof latestData !== 'undefined') {\n lastDataRef.current = latestData\n }\n }, [latestData, status])\n\n let resolvedData = latestData\n\n if (typeof resolvedData === 'undefined') {\n resolvedData = lastDataRef.current\n }\n\n if (typeof resolvedData !== 'undefined') {\n status = 'success'\n }\n\n if (query.config.suspense) {\n if (query.status === statusError) {\n throw query.error\n }\n if (query.status === statusLoading) {\n query.wasSuspensed = true\n throw query.refetch()\n }\n }\n\n return {\n ...query,\n resolvedData,\n latestData,\n status,\n }\n}\n","import React from 'react'\n\n//\n\nimport { useBaseQuery } from './useBaseQuery'\nimport { getQueryArgs, useGetLatest, statusError, statusLoading } from './utils'\n\nexport function useInfiniteQuery(...args) {\n const queryInfoRef = React.useRef()\n let [queryKey, queryVariables, queryFn, config = {}] = getQueryArgs(args)\n\n const { getFetchMore } = config\n const getGetFetchMore = useGetLatest(getFetchMore)\n\n // The default queryFn will query all pages and map them together\n const originalQueryFn = queryFn\n\n queryFn = async () => {\n const data = await Promise.all(\n queryInfoRef.current.query.pageVariables.map(args =>\n originalQueryFn(...args)\n )\n )\n queryInfoRef.current.query.canFetchMore = getGetFetchMore()(\n data[data.length - 1],\n data\n )\n return data\n }\n\n const queryInfo = useBaseQuery(queryKey, queryVariables, queryFn, config)\n queryInfoRef.current = queryInfo\n\n let {\n refetch,\n data = [],\n query: { canFetchMore },\n } = queryInfo\n\n // Here we seed the pageVariabes for the query\n if (!queryInfo.query.pageVariables) {\n queryInfo.query.pageVariables = [\n [...queryInfo.query.queryKey, ...queryInfo.query.queryVariables],\n ]\n }\n\n const fetchMore = React.useCallback(\n (fetchMoreInfo = queryInfoRef.current.query.canFetchMore) =>\n refetch({\n force: true,\n __queryFn: async (...args) => {\n try {\n queryInfoRef.current.query.isFetchingMore = true\n const newArgs = [...args, fetchMoreInfo]\n queryInfoRef.current.query.pageVariables.push(newArgs)\n const data = [\n ...queryInfoRef.current.data,\n await originalQueryFn(...newArgs),\n ]\n queryInfoRef.current.query.canFetchMore = getGetFetchMore()(\n data[data.length - 1],\n data\n )\n return data\n } finally {\n queryInfoRef.current.query.isFetchingMore = false\n }\n },\n }),\n [getGetFetchMore, originalQueryFn, refetch]\n )\n\n const isFetchingMore = React.useMemo(() => {\n return !!queryInfo.query.isFetchingMore\n }, [queryInfo.query.isFetchingMore])\n\n if (queryInfo.config.suspense) {\n if (queryInfo.status === statusError) {\n throw queryInfo.error\n }\n if (queryInfo.status === statusLoading) {\n queryInfo.wasSuspensed = true\n throw queryInfo.refetch()\n }\n }\n\n return {\n ...queryInfo,\n data,\n canFetchMore,\n fetchMore,\n isFetchingMore,\n }\n}\n"],"names":["statusIdle","statusLoading","statusError","statusSuccess","_uid","uid","cancelledError","isServer","window","noop","Console","console","error","warn","log","setConsole","c","useGetLatest","obj","ref","React","useRef","current","useCallback","functionalUpdate","updater","old","stableStringifyReplacer","_","value","isObject","Object","assign","keys","sort","map","key","stableStringify","JSON","stringify","a","Array","isArray","isDocumentVisible","document","undefined","visibilityState","getQueryArgs","args","hasOwnProperty","queryKey","variables","queryFn","config","Error","useMountedCallback","callback","mounted","configContext","createContext","defaultConfigRef","retry","retryDelay","attemptIndex","Math","min","staleTime","cacheTime","refetchAllOnWindowFocus","refetchInterval","suspense","queryKeySerializerFn","defaultQueryKeySerializerFn","queryHash","parse","queryFnParamsFilter","d","throwOnError","useErrorBoundary","onSuccess","onError","onSettled","refetchOnMount","useConfigContext","useContext","ReactQueryConfigProvider","children","configContextValue","newConfig","useMemo","Provider","then","direct","Promise","resolve","body","recover","result","e","f","i","arguments","length","apply","this","reject","queryCache","listeners","cache","queries","isFetching","notifyGlobalListeners","values","reduce","acc","query","state","forEach","subscribe","cb","push","splice","indexOf","clear","findQueries","predicate","exact","deepIncludes","b","some","filter","getQueries","getQuery","getQueryData","_cache$getQuery","data","removeQueries","foundQueries","clearTimeout","staleTimeout","refetchQueries","force","all","fetch","err","_buildQuery","userQueryKey","queryVariables","options","reducer","queryReducer","defaultQueryReducer","noQueryHash","initialData","hasInitialData","isStale","manual","instances","type","actionInit","initialStatus","dispatch","action","onStateUpdate","scheduleStaleTimeout","Infinity","setTimeout","actionMarkStale","scheduleGarbageCollection","cacheTimeout","status","heal","cancelled","instance","found","find","id","cancelQueries","tryFetchData","promise","cancel","actionFailed","failureCount","shouldContinueRetryOnFocus","delay","__queryFn","_async","actionFetch","setData","actionError","actionSuccess","makeQuery","prefetchQuery","res","wasPrefetched","setQueryData","makeQueryCache","canFetchMore","updatedAt","Date","now","removePreviousHandler","onWindowFocus","navigator","onLine","refetchOnWindowFocus","catch","setFocusHandler","useIsFetching","useState","setState","useEffect","_await","handleFocus","_window","addEventListener","removeEventListener","getDefaultState","actionReset","actionLoading","actionResolve","actionReject","mutationReducer","useMutation","mutationFn","useReducer","getMutationFn","getConfig","latestMutationRef","mutate","resolvedOptions","mutationId","reset","useBaseQuery","instanceId","queryRef","newQuery","rerender","getLatestConfig","refetch","rest","unsubscribeFromQuery","wasSuspensed","clearInterval","setInterval","refetchIntervalInBackground","useQuery","usePaginatedQuery","lastDataRef","latestData","resolvedData","thrown","finalizer","bind","useInfiniteQuery","queryInfoRef","getFetchMore","getGetFetchMore","originalQueryFn","queryInfo","pageVariables","fetchMore","fetchMoreInfo","isFetchingMore","newArgs"],"mappings":"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"}