apeman-react-mixins
Version:
React mixin set of apeman.
144 lines (115 loc) • 9.58 kB
JavaScript
/**
* Mixin to handle spin.
* @mixin ApSpinMixin
*/
;
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