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