diff --git a/src/main/catalog-pusher.ts b/src/main/catalog-pusher.ts index a367c36bed..3f8928ada3 100644 --- a/src/main/catalog-pusher.ts +++ b/src/main/catalog-pusher.ts @@ -19,35 +19,40 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { reaction } from "mobx"; +import { autorun } from "mobx"; import { broadcastMessage, subscribeToBroadcast, unsubscribeFromBroadcast } from "../common/ipc"; import { CatalogEntityRegistry } from "../common/catalog"; import "../common/catalog-entities/kubernetes-cluster"; -import { Disposer } from "../common/utils"; +import { Disposer, disposer } from "../common/utils"; +import logger from "./logger"; export class CatalogPusher { + static logPrefix = `[CatalogPusher]`; + static init(catalog: CatalogEntityRegistry) { - new CatalogPusher(catalog).init(); + return new CatalogPusher(catalog).init(); } private constructor(private catalog: CatalogEntityRegistry) { } - init() { - const disposers: Disposer[] = [ - reaction( - () => this.catalog.items, - (items) => broadcastMessage("catalog:items", items), - { fireImmediately: true } - ), - ]; + private init(): Disposer { + logger.info(`${CatalogPusher.logPrefix}: init`); - const listener = subscribeToBroadcast("catalog:broadcast", () => { + const dispose = disposer(); + + const broadcastItems = () => { + logger.info(`${CatalogPusher.logPrefix}: broadcasting entities`); broadcastMessage("catalog:items", this.catalog.items); - }); + }; - disposers.push(() => unsubscribeFromBroadcast("catalog:broadcast", listener)); + // broadcast entities when catalog items gets updated + dispose.push(autorun(broadcastItems)); - return disposers; + // broadcast entities from IPC-event request + const listener = subscribeToBroadcast("catalog:broadcast", broadcastItems); + dispose.push(() => unsubscribeFromBroadcast("catalog:broadcast", listener)); + + return dispose; } } diff --git a/src/main/catalog-sources/kubeconfig-sync.ts b/src/main/catalog-sources/kubeconfig-sync.ts index 78a27c1209..1c4ae1ddba 100644 --- a/src/main/catalog-sources/kubeconfig-sync.ts +++ b/src/main/catalog-sources/kubeconfig-sync.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { action, computed, IComputedValue, makeObservable, observable, ObservableMap, runInAction, } from "mobx"; +import { action, computed, IComputedValue, makeObservable, observable, ObservableMap, runInAction, observe } from "mobx"; import { CatalogEntity, catalogEntityRegistry } from "../../common/catalog"; import { watch } from "chokidar"; import fs from "fs"; @@ -74,7 +74,7 @@ export class KubeconfigSyncManager extends Singleton { this.startNewSync(filePath); } - this.syncListDisposer = UserStore.getInstance().syncKubeconfigEntries.observe_(change => { + this.syncListDisposer = observe(UserStore.getInstance().syncKubeconfigEntries, change => { switch (change.type) { case "add": this.startNewSync(change.name); diff --git a/src/renderer/api/catalog-entity-registry.ts b/src/renderer/api/catalog-entity-registry.ts index 755c874d08..f1d96fb868 100644 --- a/src/renderer/api/catalog-entity-registry.ts +++ b/src/renderer/api/catalog-entity-registry.ts @@ -19,13 +19,14 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { action, observable, makeObservable } from "mobx"; +import { action, makeObservable, observable } from "mobx"; import { broadcastMessage, subscribeToBroadcast } from "../../common/ipc"; -import { CatalogCategory, CatalogEntity, CatalogEntityData, catalogCategoryRegistry, CatalogCategoryRegistry, CatalogEntityKindData } from "../../common/catalog"; +import { CatalogCategory, catalogCategoryRegistry, CatalogCategoryRegistry, CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../../common/catalog"; import "../../common/catalog-entities"; +import logger from "../../main/logger"; export class CatalogEntityRegistry { - @observable protected _items: CatalogEntity[] = observable.array(); + protected _items = observable.array(); @observable protected _activeEntity: CatalogEntity; constructor(private categoryRegistry: CatalogCategoryRegistry) { @@ -33,14 +34,17 @@ export class CatalogEntityRegistry { } init() { - subscribeToBroadcast("catalog:items", (ev, items: (CatalogEntityData & CatalogEntityKindData)[]) => { + subscribeToBroadcast("catalog:items", (event, items: (CatalogEntityData & CatalogEntityKindData)[]) => { + logger.info(`[CatalogEntityRegistry]: received new catalog items`, items); this.updateItems(items); }); broadcastMessage("catalog:broadcast"); } @action updateItems(items: (CatalogEntityData & CatalogEntityKindData)[]) { - this._items = items.map(data => this.categoryRegistry.getEntityForData(data)); + this._items.replace( + items.map(data => this.categoryRegistry.getEntityForData(data)) + ); } set activeEntity(entity: CatalogEntity) {