UNPKG

apeman-react-mixins

Version:
144 lines (115 loc) 9.58 kB
/** * Mixin to handle spin. * @mixin ApSpinMixin */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _argx = require('argx'); var _argx2 = _interopRequireDefault(_argx); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var SPIN_PROP_KEY = '_apSpin'; /** @lends ApSpinMixin */ var ApSpinMixin = { // -------------------- // Custom // -------------------- $apSpinMixed: true, /** * Count active spin. * @param {string} name - Name of spin. * @returns {number} - Number of spins. */ getSpinCount: function getSpinCount(name) { var s = this; name = name || 'default'; var counts = s.state[SPIN_PROP_KEY] || {}; return Number(counts[name] || 0); }, /** * Set active spin count. * @param {string} name - Name of spin. * @param {number} count - Count to set. */ setSpinCount: function setSpinCount(name, count) { var s = this; name = name || 'default'; var counts = s.state[SPIN_PROP_KEY] || {}; counts[name] = count; if (s.isMounted()) { s.setState(_defineProperty({}, SPIN_PROP_KEY, counts)); } }, /** * Check if spin exists. * @returns {boolean} - Exists or not. */ hasSpin: function hasSpin(name) { var s = this; name = name || 'default'; return s.getSpinCount(name) > 0; }, /** * Increment spin count. * @param {string} name - Name of spin. */ incrementSpinCount: function incrementSpinCount(name) { var s = this; s.setSpinCount(name, s.getSpinCount(name) + 1); }, /** * Decrement spin count. * @param {string} name - Name of spin. */ decrementSpinCount: function decrementSpinCount(name) { var s = this; s.setSpinCount(name, s.getSpinCount(name) - 1); }, /** * Rest spin count * @param {string} name - Name of spin. */ resetSpinCount: function resetSpinCount(name) { var s = this; s.setSpinCount(name, 0); }, /** * Add spin count while active. * @param {string|number|symbol} name - Name of spin. * @param {function} action - Action to do. */ spinWhile: function spinWhile(name, action) { var args = (0, _argx2.default)(arguments); name = args.shift('string|number|symbol'); action = args.pop('function'); var s = this; s.incrementSpinCount(name); var promise = action(); if (!promise) { throw new Error('[ApSpinMixin] action must return a promise.'); } return promise.then(function (result) { s.decrementSpinCount(name); return Promise.resolve(result); }).catch(function (err) { s.decrementSpinCount(name); return Promise.reject(err); }); }, // -------------------- // Specs // -------------------- getInitialState: function getInitialState() { var s = this; return _defineProperty({}, SPIN_PROP_KEY, {}); } // -------------------- // Lifecycle // -------------------- }; exports.default = Object.freeze(ApSpinMixin); //# sourceMappingURL=data:application/json;base64,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cnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LW1peGlucy9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1peGluIHRvIGhhbmRsZSBzcGluLlxuICogQG1peGluIEFwU3Bpbk1peGluXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgYXJneCBmcm9tICdhcmd4J1xuXG5jb25zdCBTUElOX1BST1BfS0VZID0gJ19hcFNwaW4nXG5cbi8qKiBAbGVuZHMgQXBTcGluTWl4aW4gKi9cbmxldCBBcFNwaW5NaXhpbiA9IHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDdXN0b21cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgJGFwU3Bpbk1peGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBDb3VudCBhY3RpdmUgc3Bpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHNwaW4uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gTnVtYmVyIG9mIHNwaW5zLlxuICAgKi9cbiAgZ2V0U3BpbkNvdW50IChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBuYW1lID0gbmFtZSB8fCAnZGVmYXVsdCdcbiAgICBsZXQgY291bnRzID0gcy5zdGF0ZVsgU1BJTl9QUk9QX0tFWSBdIHx8IHt9XG4gICAgcmV0dXJuIE51bWJlcihjb3VudHNbIG5hbWUgXSB8fCAwKVxuICB9LFxuXG4gIC8qKlxuICAgKiBTZXQgYWN0aXZlIHNwaW4gY291bnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBzcGluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgIC0gQ291bnQgdG8gc2V0LlxuICAgKi9cbiAgc2V0U3BpbkNvdW50IChuYW1lLCBjb3VudCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbmFtZSA9IG5hbWUgfHwgJ2RlZmF1bHQnXG4gICAgbGV0IGNvdW50cyA9IHMuc3RhdGVbIFNQSU5fUFJPUF9LRVkgXSB8fCB7fVxuICAgIGNvdW50c1sgbmFtZSBdID0gY291bnRcbiAgICBpZiAocy5pc01vdW50ZWQoKSkge1xuICAgICAgcy5zZXRTdGF0ZSh7IFtTUElOX1BST1BfS0VZXTogY291bnRzIH0pXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzcGluIGV4aXN0cy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gRXhpc3RzIG9yIG5vdC5cbiAgICovXG4gIGhhc1NwaW4gKG5hbWUpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIG5hbWUgPSBuYW1lIHx8ICdkZWZhdWx0J1xuICAgIHJldHVybiBzLmdldFNwaW5Db3VudChuYW1lKSA+IDBcbiAgfSxcblxuICAvKipcbiAgICogSW5jcmVtZW50IHNwaW4gY291bnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBzcGluLlxuICAgKi9cbiAgaW5jcmVtZW50U3BpbkNvdW50IChuYW1lKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcbiAgICBzLnNldFNwaW5Db3VudChuYW1lLCBzLmdldFNwaW5Db3VudChuYW1lKSArIDEpXG4gIH0sXG5cbiAgLyoqXG4gICAqIERlY3JlbWVudCBzcGluIGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2Ygc3Bpbi5cbiAgICovXG4gIGRlY3JlbWVudFNwaW5Db3VudCAobmFtZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5zZXRTcGluQ291bnQobmFtZSwgcy5nZXRTcGluQ291bnQobmFtZSkgLSAxKVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZXN0IHNwaW4gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHNwaW4uXG4gICAqL1xuICByZXNldFNwaW5Db3VudCAobmFtZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5zZXRTcGluQ291bnQobmFtZSwgMClcbiAgfSxcblxuICAvKipcbiAgICogQWRkIHNwaW4gY291bnQgd2hpbGUgYWN0aXZlLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8c3ltYm9sfSBuYW1lIC0gTmFtZSBvZiBzcGluLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBhY3Rpb24gLSBBY3Rpb24gdG8gZG8uXG4gICAqL1xuICBzcGluV2hpbGUgKG5hbWUsIGFjdGlvbikge1xuICAgIGxldCBhcmdzID0gYXJneChhcmd1bWVudHMpXG4gICAgbmFtZSA9IGFyZ3Muc2hpZnQoJ3N0cmluZ3xudW1iZXJ8c3ltYm9sJylcbiAgICBhY3Rpb24gPSBhcmdzLnBvcCgnZnVuY3Rpb24nKVxuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5pbmNyZW1lbnRTcGluQ291bnQobmFtZSlcbiAgICBsZXQgcHJvbWlzZSA9IGFjdGlvbigpXG4gICAgaWYgKCFwcm9taXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tBcFNwaW5NaXhpbl0gYWN0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZS4nKVxuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBzLmRlY3JlbWVudFNwaW5Db3VudChuYW1lKVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBzLmRlY3JlbWVudFNwaW5Db3VudChuYW1lKVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfSlcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBTcGVjc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBnZXRJbml0aWFsU3RhdGUgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcmV0dXJuIHtcbiAgICAgIFtTUElOX1BST1BfS0VZXToge31cbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKEFwU3Bpbk1peGluKVxuIl19