diff --git a/extensions/telemetry/src/tracker.ts b/extensions/telemetry/src/tracker.ts index fe9c3ab978..52209b8fa0 100644 --- a/extensions/telemetry/src/tracker.ts +++ b/extensions/telemetry/src/tracker.ts @@ -36,7 +36,7 @@ export class Tracker extends Singleton { this.event(ev.name, ev.action, ev.params) } this.eventHandlers.push(handler) - appEventBus.on(handler) + appEventBus.addListener(handler) } stop() { @@ -45,7 +45,7 @@ export class Tracker extends Singleton { this.started = false for (const handler of this.eventHandlers) { - appEventBus.off(handler) + appEventBus.removeListener(handler) } } diff --git a/src/common/__tests__/event-bus.test.ts b/src/common/__tests__/event-bus.test.ts index 35e9636a89..7daa9ed9b0 100644 --- a/src/common/__tests__/event-bus.test.ts +++ b/src/common/__tests__/event-bus.test.ts @@ -4,9 +4,10 @@ describe("event bus tests", () => { describe("emit", () => { it("emits an event", () => { let event: AppEvent = null - appEventBus.on((ev: AppEvent) => { - event = ev + appEventBus.addListener((data) => { + event = data }) + appEventBus.emit({name: "foo", action: "bar"}) expect(event.name).toBe("foo") }) diff --git a/src/common/event-bus.ts b/src/common/event-bus.ts index f5c34128ee..4259467380 100644 --- a/src/common/event-bus.ts +++ b/src/common/event-bus.ts @@ -1,46 +1,4 @@ -export interface Listener { - (event: T): void; -} - -export interface Disposable { - dispose(): void; -} - -export class EventBus { - private listeners: Listener[] = []; - private listenersOnce: Listener[] = []; - - on(listener: Listener): Disposable { - this.listeners.push(listener); - return { - dispose: () => this.off(listener) - }; - } - - once(listener: Listener): void { - this.listenersOnce.push(listener); - } - - off(listener: Listener) { - const callbackIndex = this.listeners.indexOf(listener); - if (callbackIndex > -1) this.listeners.splice(callbackIndex, 1); - } - - emit(event: T) { - this.listeners.forEach((listener) => listener(event)); - - // clear the once queue - if (this.listenersOnce.length > 0) { - const toCall = this.listenersOnce; - this.listenersOnce = []; - toCall.forEach((listener) => listener(event)); - } - } - - pipe = (te: EventBus): Disposable => { - return this.on((e) => te.emit(e)); - } -} +import { EventEmitter } from "./event-emitter" export type AppEvent = { name: string; @@ -48,4 +6,4 @@ export type AppEvent = { params?: object; } -export const appEventBus = new EventBus() +export const appEventBus = new EventEmitter<[AppEvent]>() diff --git a/src/renderer/utils/eventEmitter.ts b/src/common/event-emitter.ts similarity index 100% rename from src/renderer/utils/eventEmitter.ts rename to src/common/event-emitter.ts diff --git a/src/renderer/api/json-api.ts b/src/renderer/api/json-api.ts index 2d274d5f6c..027c201175 100644 --- a/src/renderer/api/json-api.ts +++ b/src/renderer/api/json-api.ts @@ -1,7 +1,7 @@ // Base http-service / json-api class import { stringify } from "querystring"; -import { EventEmitter } from "../utils/eventEmitter"; +import { EventEmitter } from "../../common/event-emitter"; import { cancelableFetch } from "../utils/cancelableFetch"; export interface JsonApiData { diff --git a/src/renderer/api/websocket-api.ts b/src/renderer/api/websocket-api.ts index daf46b286c..cb94881035 100644 --- a/src/renderer/api/websocket-api.ts +++ b/src/renderer/api/websocket-api.ts @@ -1,5 +1,5 @@ import { observable } from "mobx"; -import { EventEmitter } from "../utils/eventEmitter"; +import { EventEmitter } from "../../common/event-emitter"; interface IParams { url?: string; // connection url, starts with ws:// or wss:// diff --git a/src/renderer/utils/index.ts b/src/renderer/utils/index.ts index 4ae9b068a7..d8c9d692c4 100755 --- a/src/renderer/utils/index.ts +++ b/src/renderer/utils/index.ts @@ -7,7 +7,7 @@ export * from "../../common/utils" export * from "./cssVar" export * from "./cssNames" -export * from "./eventEmitter" +export * from "../../common/event-emitter" export * from "./downloadFile" export * from "./prevDefault" export * from "./createStorage"