webamp/js/emitter.ts
2020-04-06 19:50:20 -07:00

28 lines
704 B
TypeScript

export default class Emitter {
_listeners: { [event: string]: Array<(...args: any[]) => void> };
constructor() {
this._listeners = {};
}
on(event: string, callback: (...args: any[]) => void) {
const eventListeners = this._listeners[event] || [];
eventListeners.push(callback);
this._listeners[event] = eventListeners;
const unsubscribe = () => {
this._listeners[event] = eventListeners.filter((cb) => cb !== callback);
};
return unsubscribe;
}
trigger(event: string, ...args: any[]) {
const callbacks = this._listeners[event];
if (callbacks) {
callbacks.forEach((cb) => cb(...args));
}
}
dispose() {
this._listeners = {};
}
}