Stop using global shared state for ExtensionDiscovery and it's relatives

Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com>
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne SavolainenandMikko Aspiala committed 2021-12-28 11:51:34 +02:00
1 parent 41aacb3db2
commit a9189f82e6
55 files changed
+1251 -587

No files matched your search

@@ -21,9 +21,13 @@
import { getInjectable } from "@ogre-tools/injectable";
import { lifecycleEnum } from "@ogre-tools/injectable";
import { ExtensionLoader } from "./extension-loader";
import extensionsStoreInjectable from "../extensions-store/extensions-store.injectable";
const extensionLoaderInjectable = getInjectable({
instantiate: () => new ExtensionLoader(),
instantiate: (di) => new ExtensionLoader({
extensionsStore: di.inject(extensionsStoreInjectable),
}),
lifecycle: lifecycleEnum.singleton,
});
@@ -29,8 +29,8 @@ import { broadcastMessage, ipcMainOn, ipcRendererOn, requestMain, ipcMainHandle
import { Disposer, toJS } from "../../common/utils";
import logger from "../../main/logger";
import type { KubernetesCluster } from "../common-api/catalog";
import type { InstalledExtension } from "../extension-discovery";
import { ExtensionsStore } from "../extensions-store";
import type { InstalledExtension } from "../extension-discovery/extension-discovery";
import type { ExtensionsStore } from "../extensions-store/extensions-store";
import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension";
import type { LensRendererExtension } from "../lens-renderer-extension";
import * as registries from "../registries";
@@ -41,6 +41,10 @@ export function extensionPackagesRoot() {
const logModule = "[EXTENSIONS-LOADER]";
interface Dependencies {
extensionsStore: ExtensionsStore
}
/**
* Loads installed extensions to the Lens application
*/
@@ -75,7 +79,7 @@ export class ExtensionLoader {
return when(() => this.isLoaded);
}
constructor() {
constructor(protected dependencies : Dependencies) {
makeObservable(this);
observe(this.instances, change => {
switch (change.type) {
@@ -156,7 +160,7 @@ export class ExtensionLoader {
// save state on change `extension.isEnabled`
reaction(() => this.storeState, extensionsState => {
ExtensionsStore.getInstance().mergeState(extensionsState);
this.dependencies.extensionsStore.mergeState(extensionsState);
});
}