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.event(ev.name, ev.action, ev.params)
} }
this.eventHandlers.push(handler) this.eventHandlers.push(handler)
appEventBus.on(handler) appEventBus.addListener(handler)
} }
stop() { stop() {
@ -45,7 +45,7 @@ export class Tracker extends Singleton {
this.started = false this.started = false
for (const handler of this.eventHandlers) { for (const handler of this.eventHandlers) {
appEventBus.off(handler) appEventBus.removeListener(handler)
} }
} }

View File

@ -4,9 +4,10 @@ describe("event bus tests", () => {
describe("emit", () => { describe("emit", () => {
it("emits an event", () => { it("emits an event", () => {
let event: AppEvent = null let event: AppEvent = null
appEventBus.on((ev: AppEvent) => { appEventBus.addListener((data) => {
event = ev event = data
}) })
appEventBus.emit({name: "foo", action: "bar"}) appEventBus.emit({name: "foo", action: "bar"})
expect(event.name).toBe("foo") expect(event.name).toBe("foo")
}) })

View File

@ -1,46 +1,4 @@
export interface Listener<T> { import { EventEmitter } from "./event-emitter"
(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));
}
}
export type AppEvent = { export type AppEvent = {
name: string; name: string;
@ -48,4 +6,4 @@ export type AppEvent = {
params?: object; 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 // Base http-service / json-api class
import { stringify } from "querystring"; import { stringify } from "querystring";
import { EventEmitter } from "../utils/eventEmitter"; import { EventEmitter } from "../../common/event-emitter";
import { cancelableFetch } from "../utils/cancelableFetch"; import { cancelableFetch } from "../utils/cancelableFetch";
export interface JsonApiData { export interface JsonApiData {

View File

@ -1,5 +1,5 @@
import { observable } from "mobx"; import { observable } from "mobx";
import { EventEmitter } from "../utils/eventEmitter"; import { EventEmitter } from "../../common/event-emitter";
interface IParams { interface IParams {
url?: string; // connection url, starts with ws:// or wss:// url?: string; // connection url, starts with ws:// or wss://

View File

@ -7,7 +7,7 @@ export * from "../../common/utils"
export * from "./cssVar" export * from "./cssVar"
export * from "./cssNames" export * from "./cssNames"
export * from "./eventEmitter" export * from "../../common/event-emitter"
export * from "./downloadFile" export * from "./downloadFile"
export * from "./prevDefault" export * from "./prevDefault"
export * from "./createStorage" export * from "./createStorage"