@dormakaba/digital-reactnative-client
Version:
dormakaba digital react components and utils
48 lines (41 loc) • 1.03 kB
JavaScript
class EventEmitter {
constructor() {
this.observers = {};
}
on(events, listener) {
events.split(' ').forEach(event => {
this.observers[event] = this.observers[event] || [];
this.observers[event].push(listener);
});
}
off(event, listener) {
if (!this.observers[event]) {
return;
}
this.observers[event].forEach(() => {
if (!listener) {
delete this.observers[event];
} else {
const index = this.observers[event].indexOf(listener);
if (index > -1) {
this.observers[event].splice(index, 1);
}
}
});
}
emit(event, ...args) {
if (this.observers[event]) {
const cloned = [].concat(this.observers[event]);
cloned.forEach(observer => {
observer(...args);
});
}
if (this.observers['*']) {
const cloned = [].concat(this.observers['*']);
cloned.forEach(observer => {
observer.apply(observer, [event, ...args]);
});
}
}
}
export default EventEmitter;