UNPKG

react-query

Version:

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

110 lines (91 loc) 2.86 kB
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose"; import { notifyManager } from './notifyManager'; import { Mutation } from './mutation'; import { matchMutation, noop } from './utils'; import { Subscribable } from './subscribable'; // TYPES // CLASS export var MutationCache = /*#__PURE__*/function (_Subscribable) { _inheritsLoose(MutationCache, _Subscribable); function MutationCache(config) { var _this; _this = _Subscribable.call(this) || this; _this.config = config || {}; _this.mutations = []; _this.mutationId = 0; return _this; } var _proto = MutationCache.prototype; _proto.build = function build(client, options, state) { var mutation = new Mutation({ mutationCache: this, mutationId: ++this.mutationId, options: client.defaultMutationOptions(options), state: state, defaultOptions: options.mutationKey ? client.getMutationDefaults(options.mutationKey) : undefined }); this.add(mutation); return mutation; }; _proto.add = function add(mutation) { this.mutations.push(mutation); this.notify(mutation); }; _proto.remove = function remove(mutation) { this.mutations = this.mutations.filter(function (x) { return x !== mutation; }); mutation.cancel(); this.notify(mutation); }; _proto.clear = function clear() { var _this2 = this; notifyManager.batch(function () { _this2.mutations.forEach(function (mutation) { _this2.remove(mutation); }); }); }; _proto.getAll = function getAll() { return this.mutations; }; _proto.find = function find(filters) { if (typeof filters.exact === 'undefined') { filters.exact = true; } return this.mutations.find(function (mutation) { return matchMutation(filters, mutation); }); }; _proto.findAll = function findAll(filters) { return this.mutations.filter(function (mutation) { return matchMutation(filters, mutation); }); }; _proto.notify = function notify(mutation) { var _this3 = this; notifyManager.batch(function () { _this3.listeners.forEach(function (listener) { listener(mutation); }); }); }; _proto.onFocus = function onFocus() { this.resumePausedMutations(); }; _proto.onOnline = function onOnline() { this.resumePausedMutations(); }; _proto.resumePausedMutations = function resumePausedMutations() { var pausedMutations = this.mutations.filter(function (x) { return x.state.isPaused; }); return notifyManager.batch(function () { return pausedMutations.reduce(function (promise, mutation) { return promise.then(function () { return mutation.continue().catch(noop); }); }, Promise.resolve()); }); }; return MutationCache; }(Subscribable);