diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 6f1454df15..f5b4806de1 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -46,7 +46,7 @@ const logModule = "[EXTENSIONS-LOADER]"; */ export class ExtensionLoader extends Singleton { protected extensions = observable.map(); - instances = observable.map(); + protected instances = observable.map(); /** * This is the set of extensions that don't come with either @@ -96,6 +96,10 @@ export class ExtensionLoader extends Singleton { }); } + @computed get enabledExtensionInstances() : LensExtension[] { + return [...this.instances.values()].filter(extension => extension.isEnabled); + } + @computed get userExtensions(): Map { const extensions = this.toJSON(); diff --git a/src/extensions/extensions.injectable.ts b/src/extensions/extensions.injectable.ts index 9cc14bc86a..08a2a253d4 100644 --- a/src/extensions/extensions.injectable.ts +++ b/src/extensions/extensions.injectable.ts @@ -28,15 +28,13 @@ const extensionsInjectable: Injectable< { extensionLoader: ExtensionLoader } > = { getDependencies: () => ({ - extensionLoader: ExtensionLoader.createInstance(), + extensionLoader: ExtensionLoader.getInstance(), }), lifecycle: lifecycleEnum.singleton, instantiate: ({ extensionLoader }) => - computed(() => - [...extensionLoader.instances.values()], - ), + computed(() => extensionLoader.enabledExtensionInstances), }; export default extensionsInjectable; diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index 5d562953ca..7b6ca8c94f 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -20,7 +20,7 @@ */ import type { InstalledExtension } from "./extension-discovery"; -import { action, observable, makeObservable } from "mobx"; +import { action, observable, makeObservable, computed } from "mobx"; import { FilesystemProvisionerStore } from "../main/extension-filesystem"; import logger from "../main/logger"; import type { ProtocolHandlerRegistration } from "./registries"; @@ -47,7 +47,12 @@ export class LensExtension { protocolHandlers: ProtocolHandlerRegistration[] = []; - @observable private isEnabled = false; + @observable private _isEnabled = false; + + @computed get isEnabled() { + return this._isEnabled; + } + [Disposers] = disposer(); constructor({ id, manifest, manifestPath, isBundled }: InstalledExtension) { @@ -83,13 +88,13 @@ export class LensExtension { @action async enable(register: (ext: LensExtension) => Promise) { - if (this.isEnabled) { + if (this._isEnabled) { return; } try { await this.onActivate(); - this.isEnabled = true; + this._isEnabled = true; this[Disposers].push(...await register(this)); logger.info(`[EXTENSION]: enabled ${this.name}@${this.version}`); @@ -100,11 +105,11 @@ export class LensExtension { @action async disable() { - if (!this.isEnabled) { + if (!this._isEnabled) { return; } - this.isEnabled = false; + this._isEnabled = false; try { await this.onDeactivate();