chayns-components
Version:
A set of beautiful React components for developing chayns® applications.
59 lines (57 loc) • 2.26 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _classPrivateFieldLooseBase2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseBase"));
var _classPrivateFieldLooseKey2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldLooseKey"));
var _events = /*#__PURE__*/(0, _classPrivateFieldLooseKey2.default)("events");
class EventEmitter {
constructor() {
Object.defineProperty(this, _events, {
writable: true,
value: []
});
this.on = this.on.bind(this);
this.off = this.off.bind(this);
this.emit = this.emit.bind(this);
this.once = this.once.bind(this);
this.removeListener = this.removeListener.bind(this);
}
on(event, listener) {
if (!(0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event]) {
(0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event] = [];
}
(0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event].push(listener);
return this;
}
off(event, listener) {
this.removeListener(event, listener);
return this;
}
removeListener(event, listener) {
if ((0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event]) {
const idx = (0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event].indexOf(listener);
if (idx > -1) {
(0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event].splice(idx, 1);
}
}
}
emit(event) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
if ((0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event]) {
(0, _classPrivateFieldLooseBase2.default)(this, _events)[_events][event].forEach(listener => listener(...args));
}
}
once(event, listener) {
var _this = this;
const listenerWrapper = function () {
_this.removeListener(event, listenerWrapper);
listener(...arguments);
};
this.on(event, listenerWrapper);
}
}
exports.default = EventEmitter;
//# sourceMappingURL=EventEmitter.js.map