1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

refactor to use EventEmitter

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen 2020-10-16 15:49:05 +03:00
parent 61d97197ec
commit b909d93a24
7 changed files with 10 additions and 51 deletions

View File

@ -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)
}
}

View File

@ -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")
})

View File

@ -1,46 +1,4 @@
export interface Listener<T> {
(event: T): void;
}
export interface Disposable {
dispose(): void;
}
export class EventBus<T> {
private listeners: Listener<T>[] = [];
private listenersOnce: Listener<T>[] = [];
on(listener: Listener<T>): Disposable {
this.listeners.push(listener);
return {
dispose: () => this.off(listener)
};
}
once(listener: Listener<T>): void {
this.listenersOnce.push(listener);
}
off(listener: Listener<T>) {
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<T>): 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<AppEvent>()
export const appEventBus = new EventEmitter<[AppEvent]>()

View File

@ -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 {

View File

@ -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://

View File

@ -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"