micro-event-manager
Version:
A tiny event manager library based on publish-subscribe pattern
50 lines (48 loc) • 1.76 kB
JavaScript
var EventManager = /** @class */ (function () {
function EventManager() {
this._events = {};
this._publishedEvents = [];
this._uniqueId = 0; // use self increasing number to guarantee global uniqueness
}
EventManager.prototype.subscribe = function (name, callback) {
if (!this._events[name]) {
this._events[name] = [];
}
var event = { key: this._uniqueId++, callback: callback };
this._events[name].push(event);
return event.key;
};
EventManager.prototype.publish = function (name, data) {
this._publishedEvents.push({ name: name, data: data });
if (this._events[name]) {
this._events[name].forEach(function (_a) {
var callback = _a.callback;
callback(data);
});
}
};
EventManager.prototype.unSubscribe = function (name, key) {
if (this._events[name]) {
for (var i = 0; i < this._events[name].length; i++) {
if (key === this._events[name][i].key) {
this._events[name].splice(i, 1);
break;
}
}
}
};
// Make sure published events can be triggered when subscribed
EventManager.prototype.ensureTriggeredAndSubscribe = function (name, callback) {
var event = this._publishedEvents
.slice()
.reverse()
.find(function (item) { return item.name === name; });
if (event) {
callback(event.data);
}
return this.subscribe(name, callback);
};
return EventManager;
}());
export { EventManager };
//# sourceMappingURL=index.es.js.map