diff options
Diffstat (limited to 'web-timeplot/src/core/event-bus.js')
| -rw-r--r-- | web-timeplot/src/core/event-bus.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/web-timeplot/src/core/event-bus.js b/web-timeplot/src/core/event-bus.js new file mode 100644 index 0000000..192eb6d --- /dev/null +++ b/web-timeplot/src/core/event-bus.js @@ -0,0 +1,32 @@ +export class EventBus { + constructor() { + this.listeners = new Map(); + } + + on(eventName, listener) { + if (!this.listeners.has(eventName)) { + this.listeners.set(eventName, new Set()); + } + + const listeners = this.listeners.get(eventName); + listeners.add(listener); + + return () => { + listeners.delete(listener); + if (listeners.size === 0) { + this.listeners.delete(eventName); + } + }; + } + + emit(eventName, payload) { + const listeners = this.listeners.get(eventName); + if (!listeners) { + return; + } + + for (const listener of listeners) { + listener(payload); + } + } +} |
