UNPKG

mobx-roof-pending-effect

Version:
76 lines (59 loc) 2.35 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * Cancel action if action is pending */ var pendingActionCache = {}; var PendingError = function (_Error) { _inherits(PendingError, _Error); function PendingError() { _classCallCheck(this, PendingError); return _possibleConstructorReturn(this, Object.getPrototypeOf(PendingError).apply(this, arguments)); } return PendingError; }(Error); var getKey = function getKey(model, action) { return model.getID() + '.' + action; }; function beforeEffect(_ref) { var action = _ref.action; var payload = _ref.payload; var model = _ref.model; var key = getKey(model, action); if (pendingActionCache[key]) { throw new PendingError('PENDING_ERROR'); } pendingActionCache[key] = true; return payload; } function afterEffect(_ref2) { var action = _ref2.action; var payload = _ref2.payload; var model = _ref2.model; var key = getKey(model, action); pendingActionCache[key] = false; return payload; } function errorEffect(_ref3) { var action = _ref3.action; var payload = _ref3.payload; var model = _ref3.model; var key = getKey(model, action); if (payload instanceof PendingError) { // Don't catch pending error return null; } pendingActionCache[key] = false; return payload; } exports.default = { before: beforeEffect, after: afterEffect, error: errorEffect }; module.exports = exports['default'];