react-query
Version:
Hooks for managing, caching and syncing asynchronous and remote data in React
50 lines (35 loc) • 1.9 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
exports.__esModule = true;
exports.useQueries = useQueries;
var _react = _interopRequireDefault(require("react"));
var _index = require("use-sync-external-store/shim/index.js");
var _notifyManager = require("../core/notifyManager");
var _queriesObserver = require("../core/queriesObserver");
var _QueryClientProvider = require("./QueryClientProvider");
var _isRestoring = require("./isRestoring");
function useQueries({
queries,
context
}) {
const queryClient = (0, _QueryClientProvider.useQueryClient)({
context
});
const isRestoring = (0, _isRestoring.useIsRestoring)();
const defaultedQueries = _react.default.useMemo(() => queries.map(options => {
const defaultedOptions = queryClient.defaultQueryOptions(options); // Make sure the results are already in fetching state before subscribing or updating options
defaultedOptions._optimisticResults = isRestoring ? 'isRestoring' : 'optimistic';
return defaultedOptions;
}), [queries, queryClient, isRestoring]);
const [observer] = _react.default.useState(() => new _queriesObserver.QueriesObserver(queryClient, defaultedQueries));
const result = observer.getOptimisticResult(defaultedQueries);
(0, _index.useSyncExternalStore)(_react.default.useCallback(onStoreChange => isRestoring ? () => undefined : observer.subscribe(_notifyManager.notifyManager.batchCalls(onStoreChange)), [observer, isRestoring]), () => observer.getCurrentResult(), () => observer.getCurrentResult());
_react.default.useEffect(() => {
// Do not notify on updates because of changes in the options because
// these changes should already be reflected in the optimistic result.
observer.setQueries(defaultedQueries, {
listeners: false
});
}, [defaultedQueries, observer]);
return result;
}
;