wix-style-react
Version:
wix-style-react
43 lines • 1.34 kB
JavaScript
export const eventManager = {
list: new Map(),
emitQueue: new Map(),
on(event, callback) {
this.list.has(event) || this.list.set(event, []);
this.list.get(event).push(callback);
return this;
},
off(event, callback) {
if (callback) {
const cb = this.list.get(event).filter(c => c !== callback);
this.list.set(event, cb);
return this;
}
this.list.delete(event);
return this;
},
cancelEmit(event) {
const timers = this.emitQueue.get(event);
if (timers) {
timers.forEach(clearTimeout);
this.emitQueue.delete(event);
}
return this;
},
emit(event, ...args) {
this.list.has(event) &&
this.list.get(event).forEach((callback) => {
if (process.env.NODE_ENV === 'test') {
// @ts-ignore
callback(...args);
return;
}
const timer = setTimeout(() => {
// @ts-ignore
callback(...args);
}, 0);
this.emitQueue.has(event) || this.emitQueue.set(event, []);
this.emitQueue.get(event).push(timer);
});
},
};
//# sourceMappingURL=eventManager.js.map