@dannyfranca/any-chat
Version:
Universal, extensible and improved JS API for Chats, like TawkTo, Jivochat, and others.
94 lines • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var EventHandler = /** @class */ (function () {
function EventHandler() {
this._subscriptions = {};
this._events = {};
}
EventHandler.prototype.on = function (eventString, callback) {
var namespaces = eventString.split('.');
var eventName = namespaces[0];
var event = this._events[eventName];
if (!event)
return;
var subscription = event.subject.subscribe({
next: function (data) {
callback(data);
}
});
this.storeSubscription(namespaces, subscription);
};
EventHandler.prototype.off = function (eventString) {
var namespaces = eventString.split('.');
for (var _i = 0, namespaces_1 = namespaces; _i < namespaces_1.length; _i++) {
var namespace = namespaces_1[_i];
this.removeNamespaceSubscriptions(namespace);
}
};
EventHandler.prototype.init = function () {
this.mapEvents();
};
EventHandler.prototype.mapEvents = function () {
for (var _i = 0, _a = Object.keys(this._eventMap); _i < _a.length; _i++) {
var prop = _a[_i];
var callbackTuple = this._eventMap[prop];
if (!callbackTuple)
continue;
var callbackName = void 0;
var callback = void 0;
if (typeof callbackTuple === 'string') {
callbackName = callbackTuple;
callback = function () {
};
}
else {
callbackName = callbackTuple[0];
callback = callbackTuple[1];
}
this._events[prop] = {
subject: new rxjs_1.Subject(),
callbackName: callbackName,
callback: callback
};
}
};
EventHandler.prototype.trigger = function (eventName) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var event = this._events[eventName];
if (!event)
return;
event.subject.next(event.callback.apply(event, args));
};
EventHandler.prototype.hasEvent = function (eventName) {
return Boolean(this._events[eventName]);
};
EventHandler.prototype.storeSubscription = function (namespaces, subscription) {
for (var _i = 0, namespaces_2 = namespaces; _i < namespaces_2.length; _i++) {
var namespace = namespaces_2[_i];
this._subscriptions[namespace] = this._subscriptions[namespace] || [];
this._subscriptions[namespace].push(subscription);
}
};
EventHandler.prototype.removeNamespaceSubscriptions = function (namespace) {
var subscriptions = this._subscriptions[namespace];
if (subscriptions) {
for (var _i = 0, subscriptions_1 = subscriptions; _i < subscriptions_1.length; _i++) {
var subscription = subscriptions_1[_i];
subscription.unsubscribe();
}
this._subscriptions[namespace] = [];
}
};
EventHandler.setError = function (message, error) {
if (error)
message += " -> " + error.message;
return new Error(message);
};
return EventHandler;
}());
exports.default = EventHandler;
//# sourceMappingURL=EventHandler.js.map