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:
parent
61d97197ec
commit
b909d93a24
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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")
|
||||
})
|
||||
|
||||
@ -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]>()
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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://
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user