import { isFunction } from '../utils/utils.js';
/**
* Static EventManager for inter-component communication.
*
* @static
*
* @author rkoppe <roland.koppe@awi.de>
*/
export class EventManager {
static _listeners = {};
/**
* Registers the given listener function for the event name.
*
* @static
* @param {string} name
* @param {function} listener
*/
static on(event, listener) {
if (!event || !listener) return;
if (!isFunction(listener)) return;
if (!(event in EventManager._listeners)) EventManager._listeners[event] = [];
EventManager._listeners[event].push(listener);
}
/**
* Fires an event with given name and payload.
*
* @static
* @param {string} name
* @param {object} payload
*/
static fire(event, payload) {
if (!(event in EventManager._listeners)) return;
let listeners = EventManager._listeners[event].slice();
for (let i = 0; i < listeners.length; i++) {
listeners[i].call(EventManager, payload);
}
}
/**
* Removes the given listener function for the event name.
*
* @static
* @param {string} name
* @param {function} listener
*/
static remove(event, listener) {
let listeners = EventManager._listeners[event];
if (!listeners) return;
listeners.remove(listener);
}
}