UNPKG

apeman-react-mixins

Version:
110 lines (85 loc) 6.72 kB
/** * Mixin for timer. * @mixin ApTimerMixin */ 'use strict'; 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==