toosoon-events
Version:
Project providing services implemented as singleton class instances
57 lines (56 loc) • 1.57 kB
JavaScript
/**
* Utility abstract class for creating multiple event listeners
*
* @exports
* @class EventManager
* @abstract
*/
export class EventManager {
/**
* Add a listener to this manager listeners
*/
on(listener) {
if (!this.listeners.length)
this.bind?.();
if (!this.listeners.includes(listener))
this.listeners.push(listener);
return () => this.off(listener);
}
/**
* Remove a listener from this manager listeners
*/
off(listener) {
this.listeners = this.listeners.filter((_listener) => _listener !== listener);
if (!this.listeners.length)
this.unbind?.();
}
}
/**
* Utility abstract class for creating multiple events listeners
*
* @exports
* @class EventsManager
* @abstract
*/
export class EventsManager {
/**
* Add a listener to this manager listeners
*/
on(eventKey, listener) {
if (!this.listeners[eventKey])
this.listeners[eventKey] = [];
if (!this.listeners[eventKey].length)
this.bind?.(eventKey);
if (!this.listeners[eventKey].includes(listener))
this.listeners[eventKey].push(listener);
return () => this.off(eventKey, listener);
}
/**
* Remove a listener gtom this manager listeners
*/
off(eventKey, listener) {
this.listeners[eventKey] = this.listeners[eventKey]?.filter((_listener) => _listener !== listener) ?? [];
if (!this.listeners[eventKey].length)
this.unbind?.(eventKey);
}
}