48 lines
1,019 B
JavaScript
48 lines
1,019 B
JavaScript
export class MessageBus {
|
|
constructor() {
|
|
this.log = false
|
|
this.bus = new EventTarget()
|
|
}
|
|
|
|
subscribe(eventName, fn) {
|
|
if (this.log) {
|
|
console.groupCollapsed('MBUS subscribe - ', eventName);
|
|
console.trace(); // hidden in collapsed group
|
|
console.groupEnd();
|
|
}
|
|
|
|
this.bus.addEventListener(eventName, event=>{
|
|
fn(event)
|
|
if (event.detail.callback !== undefined)
|
|
event.detail.callback(event)
|
|
})
|
|
}
|
|
|
|
unsubscribe(eventName, fn) {
|
|
if (this.log) {
|
|
console.groupCollapsed('MBUS unsubscribe - ', eventName);
|
|
console.trace(); // hidden in collapsed group
|
|
console.groupEnd();
|
|
}
|
|
|
|
this.bus.removeEventListener(eventName, fn)
|
|
}
|
|
|
|
dispatch(eventName, data, callback) {
|
|
if (this.log) {
|
|
console.groupCollapsed('MBUS dispatch - ', eventName);
|
|
console.log('data', data);
|
|
console.trace(); // hidden in collapsed group
|
|
console.groupEnd();
|
|
}
|
|
|
|
const event = new CustomEvent(eventName, {
|
|
detail: {
|
|
data,
|
|
callback,
|
|
}
|
|
})
|
|
|
|
this.bus.dispatchEvent(event)
|
|
}
|
|
}
|