apeman-react-mixins
Version:
React mixin set of apeman.
110 lines (85 loc) • 6.72 kB
JavaScript
/**
* Mixin for timer.
* @mixin ApTimerMixin
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _apemanpromise = require('apemanpromise');
var _apemanpromise2 = _interopRequireDefault(_apemanpromise);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @lends ApTimerMixin */
var ApTimerMixin = {
// --------------------
// Custom
// --------------------
$apTimerMixed: true,
/**
* Set a timer with name.
* @param {string} name - Name of the timer.
* @param {number} duration - Timeout duration.
* @returns {Promise}
*/
setTimer: function setTimer(name, duration) {
var s = this;
return new _apemanpromise2.default(function (resolve) {
var id = setTimeout(function () {
resolve(id);
}, duration);
s._timers[name] = id;
});
},
/**
* Clear and set timer.
* @param {string} name - Name of the timer.
* @param {number} duration - Timeout duration.
* @returns {Promise}
*/
resetTimer: function resetTimer(name, duration) {
var s = this;
return s.clearTimer(name).then(s.setTimer(name, duration));
},
/**
* Clear a timer with name.
* @param {string} name - Name of timer.
* @returns {Promise}
*/
clearTimer: function clearTimer(name) {
var s = this;
var id = void 0;
if (s._timers.hasOwnProperty(name)) {
id = s._timers[name];
clearTimeout(id);
delete s._timers[name];
}
return _apemanpromise2.default.resolve(id);
},
/**
* Clear all timers.
* @returns {Promise}
*/
clearAllTimers: function clearAllTimers() {
var s = this;
return _apemanpromise2.default.all(Object.keys(s._timers || {}).map(function (name) {
return s.clearTimer(name);
}));
},
// --------------------
// Lifecycle
// --------------------
componentWillMount: function componentWillMount() {
var s = this;
s._timers = {};
},
componentWillUnmount: function componentWillUnmount() {
var s = this;
s.clearAllTimers();
delete s._timers;
},
_timers: undefined
};
exports.default = Object.freeze(ApTimerMixin);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3RpbWVyX21peGluLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBOzs7Ozs7QUFFQTs7OztBQUNBOzs7Ozs7O0FBR0EsSUFBSSxlQUFlOzs7OztBQUtqQixpQkFBZSxJQUxFOzs7Ozs7OztBQWFqQixVQWJpQixvQkFhUCxJQWJPLEVBYUQsUUFiQyxFQWFTO0FBQ3hCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsV0FBTyw0QkFBWSxVQUFDLE9BQUQsRUFBYTtBQUM5QixVQUFJLEtBQUssV0FBVyxZQUFNO0FBQ3hCLGdCQUFRLEVBQVI7QUFDRCxPQUZRLEVBRU4sUUFGTSxDQUFUO0FBR0EsUUFBRSxPQUFGLENBQVcsSUFBWCxJQUFvQixFQUFwQjtBQUNELEtBTE0sQ0FBUDtBQU1ELEdBckJnQjs7Ozs7Ozs7O0FBNkJqQixZQTdCaUIsc0JBNkJMLElBN0JLLEVBNkJDLFFBN0JELEVBNkJXO0FBQzFCLFFBQU0sSUFBSSxJQUFWOztBQUVBLFdBQU8sRUFBRSxVQUFGLENBQWEsSUFBYixFQUNKLElBREksQ0FFSCxFQUFFLFFBQUYsQ0FBVyxJQUFYLEVBQWlCLFFBQWpCLENBRkcsQ0FBUDtBQUlELEdBcENnQjs7Ozs7Ozs7QUEyQ2pCLFlBM0NpQixzQkEyQ0wsSUEzQ0ssRUEyQ0M7QUFDaEIsUUFBTSxJQUFJLElBQVY7QUFDQSxRQUFJLFdBQUo7QUFDQSxRQUFJLEVBQUUsT0FBRixDQUFVLGNBQVYsQ0FBeUIsSUFBekIsQ0FBSixFQUFvQztBQUNsQyxXQUFLLEVBQUUsT0FBRixDQUFXLElBQVgsQ0FBTDtBQUNBLG1CQUFhLEVBQWI7QUFDQSxhQUFPLEVBQUUsT0FBRixDQUFXLElBQVgsQ0FBUDtBQUNEO0FBQ0QsV0FBTyx3QkFBUSxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDRCxHQXBEZ0I7Ozs7Ozs7QUEwRGpCLGdCQTFEaUIsNEJBMERDO0FBQ2hCLFFBQU0sSUFBSSxJQUFWO0FBQ0EsV0FBTyx3QkFBUSxHQUFSLENBQ0wsT0FBTyxJQUFQLENBQVksRUFBRSxPQUFGLElBQWEsRUFBekIsRUFBNkIsR0FBN0IsQ0FBaUMsVUFBQyxJQUFEO0FBQUEsYUFDL0IsRUFBRSxVQUFGLENBQWEsSUFBYixDQUQrQjtBQUFBLEtBQWpDLENBREssQ0FBUDtBQUtELEdBakVnQjs7Ozs7OztBQXVFakIsb0JBdkVpQixnQ0F1RUs7QUFDcEIsUUFBTSxJQUFJLElBQVY7QUFDQSxNQUFFLE9BQUYsR0FBWSxFQUFaO0FBQ0QsR0ExRWdCO0FBNEVqQixzQkE1RWlCLGtDQTRFTztBQUN0QixRQUFNLElBQUksSUFBVjs7QUFFQSxNQUFFLGNBQUY7QUFDQSxXQUFPLEVBQUUsT0FBVDtBQUNELEdBakZnQjs7O0FBbUZqQixXQUFTOztBQW5GUSxDQUFuQjs7a0JBdUZlLE9BQU8sTUFBUCxDQUFjLFlBQWQsQyIsImZpbGUiOiJhcF90aW1lcl9taXhpbi5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvb2t1bmlzaGluaXNoaS9Qcm9qZWN0cy9hcGVtYW4tcHJvamVjdHMvYXBlbWFuLXJlYWN0LW1peGlucy9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1peGluIGZvciB0aW1lci5cbiAqIEBtaXhpbiBBcFRpbWVyTWl4aW5cbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCBQcm9taXNlIGZyb20gICdhcGVtYW5wcm9taXNlJ1xuXG4vKiogQGxlbmRzIEFwVGltZXJNaXhpbiAqL1xubGV0IEFwVGltZXJNaXhpbiA9IHtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBDdXN0b21cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgJGFwVGltZXJNaXhlZDogdHJ1ZSxcblxuICAvKipcbiAgICogU2V0IGEgdGltZXIgd2l0aCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHRpbWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gLSBUaW1lb3V0IGR1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHNldFRpbWVyIChuYW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShpZClcbiAgICAgIH0sIGR1cmF0aW9uKVxuICAgICAgcy5fdGltZXJzWyBuYW1lIF0gPSBpZFxuICAgIH0pXG4gIH0sXG5cbiAgLyoqXG4gICAqIENsZWFyIGFuZCBzZXQgdGltZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgdGltZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiAtIFRpbWVvdXQgZHVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgcmVzZXRUaW1lciAobmFtZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBzID0gdGhpc1xuXG4gICAgcmV0dXJuIHMuY2xlYXJUaW1lcihuYW1lKVxuICAgICAgLnRoZW4oXG4gICAgICAgIHMuc2V0VGltZXIobmFtZSwgZHVyYXRpb24pXG4gICAgICApXG4gIH0sXG5cbiAgLyoqXG4gICAqIENsZWFyIGEgdGltZXIgd2l0aCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGltZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2xlYXJUaW1lciAobmFtZSkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IGlkXG4gICAgaWYgKHMuX3RpbWVycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgaWQgPSBzLl90aW1lcnNbIG5hbWUgXVxuICAgICAgY2xlYXJUaW1lb3V0KGlkKVxuICAgICAgZGVsZXRlIHMuX3RpbWVyc1sgbmFtZSBdXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaWQpXG4gIH0sXG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCB0aW1lcnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2xlYXJBbGxUaW1lcnMgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmtleXMocy5fdGltZXJzIHx8IHt9KS5tYXAoKG5hbWUpID0+XG4gICAgICAgIHMuY2xlYXJUaW1lcihuYW1lKVxuICAgICAgKVxuICAgIClcbiAgfSxcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBMaWZlY3ljbGVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBjb21wb25lbnRXaWxsTW91bnQgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgcy5fdGltZXJzID0ge31cbiAgfSxcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgY29uc3QgcyA9IHRoaXNcblxuICAgIHMuY2xlYXJBbGxUaW1lcnMoKVxuICAgIGRlbGV0ZSBzLl90aW1lcnNcbiAgfSxcblxuICBfdGltZXJzOiB1bmRlZmluZWRcblxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3QuZnJlZXplKEFwVGltZXJNaXhpbilcbiJdfQ==