ez-shp-storefront
Version:
A helper function collection for Shopify storefront.
42 lines (41 loc) • 1.43 kB
JavaScript
/**
* Create an Event Bus object which has the registration and publishing API.
* addEventListener and emitEventListeners functions
* lets the subscriber and publisher to subscribe and publish on events respectively.
*/
export class EventBus {
constructor() {
this.eventTopics = {};
}
static getInstance() {
if (!this.instance) {
this.instance = new EventBus();
}
return this.instance;
}
addEventListener(eventName, listener) {
if (!this.eventTopics[eventName] || this.eventTopics[eventName].length < 1) {
this.eventTopics[eventName] = [];
}
this.eventTopics[eventName].push(listener);
return listener;
}
emitEventListeners(eventName, params) {
if (!this.eventTopics[eventName] || this.eventTopics[eventName].length < 1)
return;
this.eventTopics[eventName].forEach(function (listener) {
listener(!!params ? params : {});
});
}
removeListener(eventName, listener) {
if (!this.eventTopics[eventName] || this.eventTopics[eventName].length < 1)
return;
const index = this.eventTopics[eventName].findIndex((f) => f === listener);
// delete listener by event name
delete this.eventTopics[eventName][index];
}
getListener(eventName) {
return this.eventTopics[eventName];
}
}
EventBus.instance = null;