From 462386a206ff84f54c33b88db6197bd3e85cd71e Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 3 Nov 2020 10:00:55 +0200 Subject: [PATCH] auto enable/disable extensions -- part 4 Signed-off-by: Roman --- src/extensions/extension-loader.ts | 62 ++++++++++++------------------ 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 9763c66d63..963b235b73 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -53,59 +53,45 @@ export class ExtensionLoader extends BaseStore { loadOnMain() { logger.info('[EXTENSIONS-LOADER]: load on main') this.autoInitExtensions(); - this.autoEnableExtensions((extension: LensMainExtension) => { - this.handleActivation(extension, () => [ - registries.menuRegistry.add(...extension.appMenus) - ]) - }) + this.autoEnableExtensions((extension: LensMainExtension) => [ + registries.menuRegistry.add(...extension.appMenus) + ]) } loadOnClusterManagerRenderer() { logger.info('[EXTENSIONS-LOADER]: load on main renderer (cluster manager)') this.autoInitExtensions(); - this.autoEnableExtensions((extension: LensRendererExtension) => { - this.handleActivation(extension, () => [ - registries.globalPageRegistry.add(...extension.globalPages), - registries.appPreferenceRegistry.add(...extension.appPreferences), - registries.clusterFeatureRegistry.add(...extension.clusterFeatures), - registries.statusBarRegistry.add(...extension.statusBarItems), - ]) - }) + this.autoEnableExtensions((extension: LensRendererExtension) => [ + registries.globalPageRegistry.add(...extension.globalPages), + registries.appPreferenceRegistry.add(...extension.appPreferences), + registries.clusterFeatureRegistry.add(...extension.clusterFeatures), + registries.statusBarRegistry.add(...extension.statusBarItems), + ]) } loadOnClusterRenderer() { logger.info('[EXTENSIONS-LOADER]: load on cluster renderer (dashboard)') this.autoInitExtensions(); - this.autoEnableExtensions((extension: LensRendererExtension) => { - this.handleActivation(extension, () => [ - registries.clusterPageRegistry.add(...extension.clusterPages), - registries.kubeObjectMenuRegistry.add(...extension.kubeObjectMenuItems), - registries.kubeObjectDetailRegistry.add(...extension.kubeObjectDetailItems), - ]) - }) + this.autoEnableExtensions((extension: LensRendererExtension) => [ + registries.clusterPageRegistry.add(...extension.clusterPages), + registries.kubeObjectMenuRegistry.add(...extension.kubeObjectMenuItems), + registries.kubeObjectDetailRegistry.add(...extension.kubeObjectDetailItems), + ]) } - protected isEnabledInStore(ext: LensExtension) { - const extensionState = this.state.get(ext.id); - return !extensionState /*enabled by default*/ || extensionState.isEnabled; - } - - protected handleActivation(ext: LensExtension, addToRegistry: () => Function[]) { - const enabledInStore = this.isEnabledInStore(ext); - if (enabledInStore) { - this.disposers.set(ext.id, addToRegistry()) - } else { - this.disposers.get(ext.id)?.forEach(dispose => dispose()) - this.disposers.delete(ext.id) - } - } - - protected autoEnableExtensions(callback: (ext: LensExtension) => void) { + protected autoEnableExtensions(register: (ext: LensExtension) => Function[]) { return autorun(() => { this.instances.forEach(ext => { - const isEnabled = this.isEnabledInStore(ext); + const extensionState = this.state.get(ext.id); + const isEnabled = !extensionState /*enabled by default*/ || extensionState.isEnabled; + const isRegistered = this.disposers.has(ext.id); + if (isEnabled && !isRegistered) { + this.disposers.set(ext.id, register(ext)) + } else if (!isEnabled && isRegistered) { + this.disposers.get(ext.id).forEach(dispose => dispose()) + this.disposers.delete(ext.id) + } ext.toggle(isEnabled); - callback(ext); }) }) }