UNPKG

react-query

Version:

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

101 lines (81 loc) 2.25 kB
import { scheduleMicrotask } from './utils'; // TYPES // CLASS var NotifyManager = /*#__PURE__*/function () { function NotifyManager() { this.queue = []; this.transactions = 0; this.notifyFn = function (callback) { callback(); }; this.batchNotifyFn = function (callback) { callback(); }; } var _proto = NotifyManager.prototype; _proto.batch = function batch(callback) { this.transactions++; var result = callback(); this.transactions--; if (!this.transactions) { this.flush(); } return result; }; _proto.schedule = function schedule(callback) { var _this = this; if (this.transactions) { this.queue.push(callback); } else { scheduleMicrotask(function () { _this.notifyFn(callback); }); } } /** * All calls to the wrapped function will be batched. */ ; _proto.batchCalls = function batchCalls(callback) { var _this2 = this; return function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this2.schedule(function () { callback.apply(void 0, args); }); }; }; _proto.flush = function flush() { var _this3 = this; var queue = this.queue; this.queue = []; if (queue.length) { scheduleMicrotask(function () { _this3.batchNotifyFn(function () { queue.forEach(function (callback) { _this3.notifyFn(callback); }); }); }); } } /** * Use this method to set a custom notify function. * This can be used to for example wrap notifications with `React.act` while running tests. */ ; _proto.setNotifyFunction = function setNotifyFunction(fn) { this.notifyFn = fn; } /** * Use this method to set a custom function to batch notifications together into a single tick. * By default React Query will use the batch function provided by ReactDOM or React Native. */ ; _proto.setBatchNotifyFunction = function setBatchNotifyFunction(fn) { this.batchNotifyFn = fn; }; return NotifyManager; }(); // SINGLETON export var notifyManager = new NotifyManager();