Files
speckle-server/packages/viewer/src/modules/EventEmitter.js
T
2022-03-29 17:12:31 +03:00

40 lines
879 B
JavaScript

/*
* https://medium.com/better-programming/how-to-create-your-own-event-emitter-in-javascript-fbd5db2447c4
*/
export default class EventEmitter {
constructor() {
this._events = {}
}
on(name, listener) {
if (!this._events[name]) {
this._events[name] = []
}
this._events[name].push(listener)
}
removeListener(name, listenerToRemove) {
if (!this._events[name]) return
const filterListeners = (listener) => listener !== listenerToRemove
this._events[name] = this._events[name].filter(filterListeners)
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters
emit(name, ...args) {
if (!this._events[name]) return
const fireCallbacks = (callback) => {
callback(...args)
}
this._events[name].forEach(fireCallbacks)
}
dispose() {
this._events = null
}
}