diff --git a/extensions/example-extension/renderer.tsx b/extensions/example-extension/renderer.tsx index 9418e04c8b..a1fb546df7 100644 --- a/extensions/example-extension/renderer.tsx +++ b/extensions/example-extension/renderer.tsx @@ -3,24 +3,14 @@ import { ExampleIcon, ExamplePage } from "./page" import React from "react" export default class ExampleExtension extends LensRendererExtension { - onActivate() { - console.log('EXAMPLE EXTENSION RENDERER: ACTIVATED', this.getMeta()); - } - - registerClusterPage() { - return [ - { - path: "/extension-example", - title: "Example Extension", - components: { - Page: () => , - MenuIcon: ExampleIcon, - } + clusterPages = [ + { + path: "/extension-example", + title: "Example Extension", + components: { + Page: () => , + MenuIcon: ExampleIcon, } - ] - } - - onDeactivate() { - console.log('EXAMPLE EXTENSION RENDERER: DEACTIVATED', this.getMeta()); - } + } + ] } diff --git a/extensions/metrics-cluster-feature/renderer.tsx b/extensions/metrics-cluster-feature/renderer.tsx index 500228a01e..58565c13f5 100644 --- a/extensions/metrics-cluster-feature/renderer.tsx +++ b/extensions/metrics-cluster-feature/renderer.tsx @@ -3,23 +3,21 @@ import { MetricsFeature } from "./src/metrics-feature" import React from "react" export default class ClusterMetricsFeatureExtension extends LensRendererExtension { - registerClusterFeatures() { - return [ - { - title: "Metrics Stack", - components: { - Description: () => { - return ( - + clusterFeatures = [ + { + title: "Metrics Stack", + components: { + Description: () => { + return ( + Enable timeseries data visualization (Prometheus stack) for your cluster. Install this only if you don't have existing Prometheus stack installed. You can see preview of manifests here. - ) - } - }, - feature: new MetricsFeature() - } - ] - } + ) + } + }, + feature: new MetricsFeature() + } + ] } diff --git a/extensions/node-menu/renderer.tsx b/extensions/node-menu/renderer.tsx index 1b721d946c..db8232a518 100644 --- a/extensions/node-menu/renderer.tsx +++ b/extensions/node-menu/renderer.tsx @@ -3,19 +3,13 @@ import React from "react" import { NodeMenu, NodeMenuProps } from "./src/node-menu" export default class NodeMenuRendererExtension extends LensRendererExtension { - async onActivate() { - console.log("node-menu extension activated") - } - - registerKubeObjectMenus() { - return [ - { - kind: "Node", - apiVersions: ["v1"], - components: { - MenuItem: (props: NodeMenuProps) => - } + kubeObjectMenuItems = [ + { + kind: "Node", + apiVersions: ["v1"], + components: { + MenuItem: (props: NodeMenuProps) => } - ] - } + } + ] } diff --git a/extensions/pod-menu/renderer.tsx b/extensions/pod-menu/renderer.tsx index aa5534056a..30898da806 100644 --- a/extensions/pod-menu/renderer.tsx +++ b/extensions/pod-menu/renderer.tsx @@ -4,26 +4,20 @@ import { PodLogsMenu, PodLogsMenuProps } from "./src/logs-menu" import React from "react" export default class PodMenuRendererExtension extends LensRendererExtension { - async onActivate() { - console.log("pod-menu extension activated") - } - - registerKubeObjectMenus() { - return [ - { - kind: "Pod", - apiVersions: ["v1"], - components: { - MenuItem: (props: PodShellMenuProps) => - } - }, - { - kind: "Pod", - apiVersions: ["v1"], - components: { - MenuItem: (props: PodLogsMenuProps) => - } + kubeObjectMenuItems = [ + { + kind: "Pod", + apiVersions: ["v1"], + components: { + MenuItem: (props: PodShellMenuProps) => } - ] - } + }, + { + kind: "Pod", + apiVersions: ["v1"], + components: { + MenuItem: (props: PodLogsMenuProps) => + } + } + ] } diff --git a/extensions/support-page/main.ts b/extensions/support-page/main.ts index ae4dd24c5e..af30ebf0cd 100644 --- a/extensions/support-page/main.ts +++ b/extensions/support-page/main.ts @@ -2,22 +2,16 @@ import { LensMainExtension, windowManager } from "@k8slens/extensions"; import { supportPageURL } from "./src/support.route"; export default class SupportPageMainExtension extends LensMainExtension { - async onActivate() { - console.log("support page extension activated") - } - - registerAppMenus() { - return [ - { - parentId: "help", - label: "Support", - click() { - windowManager.navigate({ - channel: "menu:navigate", // fixme: use windowManager.ensureMainWindow from Tray's PR - url: supportPageURL(), - }); - } + appMenus = [ + { + parentId: "help", + label: "Support", + click() { + windowManager.navigate({ + channel: "menu:navigate", // fixme: use windowManager.ensureMainWindow from Tray's PR + url: supportPageURL(), + }); } - ] - } + } + ] } diff --git a/extensions/support-page/renderer.tsx b/extensions/support-page/renderer.tsx index dcb9581c8e..9f52a972bf 100644 --- a/extensions/support-page/renderer.tsx +++ b/extensions/support-page/renderer.tsx @@ -4,36 +4,28 @@ import { supportPageRoute, supportPageURL } from "./src/support.route"; import { Support } from "./src/support"; export default class SupportPageRendererExtension extends LensRendererExtension { - async onActivate() { - console.log("support page extension activated") - } - - registerGlobalPages() { - return [ - { - ...supportPageRoute, - url: supportPageURL(), - hideInMenu: true, - components: { - Page: Support, - } + globalPages = [ + { + ...supportPageRoute, + url: supportPageURL(), + hideInMenu: true, + components: { + Page: Support, } - ] - } + } + ] - registerStatusBarItems() { - return [ - { - item: ( -
Navigation.navigate(supportPageURL())} - > - - Support -
- ) - } - ] - } + statusBarItems = [ + { + item: ( +
Navigation.navigate(supportPageURL())} + > + + Support +
+ ) + } + ] } diff --git a/extensions/telemetry/renderer.tsx b/extensions/telemetry/renderer.tsx index 549d2e541c..04057386bf 100644 --- a/extensions/telemetry/renderer.tsx +++ b/extensions/telemetry/renderer.tsx @@ -5,25 +5,19 @@ import { tracker } from "./src/tracker" import React from "react" export default class TelemetryRendererExtension extends LensRendererExtension { + appPreferences = [ + { + title: "Telemetry & Usage Tracking", + components: { + Hint: () => , + Input: () => + } + } + ]; + async onActivate() { console.log("telemetry extension activated") tracker.start() await telemetryPreferencesStore.loadExtension(this) } - - registerAppPreferences() { - return [ - { - title: "Telemetry & Usage Tracking", - components: { - Hint: () => , - Input: () => - } - } - ] - } - - onDeactivate() { - console.log("telemetry extension deactivated") - } } diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 86f65a008b..c0b2d5ada6 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -37,25 +37,25 @@ export class ExtensionLoader { loadOnMain() { logger.info('[EXTENSIONS-LOADER]: load on main') this.autoloadExtensions((extension: LensMainExtension) => { - extension.register(menuRegistry, extension.registerAppMenus()) + extension.registerTo(menuRegistry, extension.appMenus) }) } loadOnClusterManagerRenderer() { logger.info('[EXTENSIONS-LOADER]: load on main renderer (cluster manager)') this.autoloadExtensions((extension: LensRendererExtension) => { - extension.register(globalPageRegistry, extension.registerGlobalPages()) - extension.register(appPreferenceRegistry, extension.registerAppPreferences()) - extension.register(clusterFeatureRegistry, extension.registerClusterFeatures()) - extension.register(statusBarRegistry, extension.registerStatusBarItems()) + extension.registerTo(globalPageRegistry, extension.globalPages) + extension.registerTo(appPreferenceRegistry, extension.appPreferences) + extension.registerTo(clusterFeatureRegistry, extension.clusterFeatures) + extension.registerTo(statusBarRegistry, extension.statusBarItems) }) } loadOnClusterRenderer() { logger.info('[EXTENSIONS-LOADER]: load on cluster renderer (dashboard)') this.autoloadExtensions((extension: LensRendererExtension) => { - extension.register(clusterPageRegistry, extension.registerClusterPages()) - extension.register(kubeObjectMenuRegistry, extension.registerKubeObjectMenus()) + extension.registerTo(clusterPageRegistry, extension.clusterPages) + extension.registerTo(kubeObjectMenuRegistry, extension.kubeObjectMenuItems) }) } diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index b8aba8c6a3..0921dc066a 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -78,8 +78,8 @@ export class LensExtension implements ExtensionModel { // mock } - register(registry: BaseRegistry, registryItems: T[]) { - const disposers = registryItems.map(item => registry.add(item)); + registerTo(registry: BaseRegistry, items: T[] = []) { + const disposers = items.map(item => registry.add(item)); this.disposers.push(...disposers); return () => { this.disposers = this.disposers.filter(disposer => !disposers.includes(disposer)) diff --git a/src/extensions/lens-main-extension.ts b/src/extensions/lens-main-extension.ts index 9fda0e9c11..8e300bda77 100644 --- a/src/extensions/lens-main-extension.ts +++ b/src/extensions/lens-main-extension.ts @@ -1,12 +1,7 @@ -import { LensExtension } from "./lens-extension" import type { MenuRegistration } from "./registries/menu-registry"; +import { observable } from "mobx"; +import { LensExtension } from "./lens-extension" export class LensMainExtension extends LensExtension { - registerAppMenus(): MenuRegistration[] { - return [] - } - - registerPrometheusProviders(): any[] { - return [] - } + @observable.shallow appMenus: MenuRegistration[] = [] } diff --git a/src/extensions/lens-renderer-extension.ts b/src/extensions/lens-renderer-extension.ts index 3ed446f392..829079d0f0 100644 --- a/src/extensions/lens-renderer-extension.ts +++ b/src/extensions/lens-renderer-extension.ts @@ -1,28 +1,12 @@ -import { LensExtension } from "./lens-extension" import type { AppPreferenceRegistration, ClusterFeatureRegistration, KubeObjectMenuRegistration, PageRegistration, StatusBarRegistration } from "./registries" +import { observable } from "mobx"; +import { LensExtension } from "./lens-extension" export class LensRendererExtension extends LensExtension { - registerGlobalPages(): PageRegistration[] { - return [] - } - - registerClusterPages(): PageRegistration[] { - return [] - } - - registerAppPreferences(): AppPreferenceRegistration[] { - return [] - } - - registerClusterFeatures(): ClusterFeatureRegistration[] { - return [] - } - - registerStatusBarItems(): StatusBarRegistration[] { - return [] - } - - registerKubeObjectMenus(): KubeObjectMenuRegistration[] { - return [] - } + @observable.shallow globalPages: PageRegistration[] = [] + @observable.shallow clusterPages: PageRegistration[] = [] + @observable.shallow appPreferences: AppPreferenceRegistration[] = [] + @observable.shallow clusterFeatures: ClusterFeatureRegistration[] = [] + @observable.shallow statusBarItems: StatusBarRegistration[] = [] + @observable.shallow kubeObjectMenuItems: KubeObjectMenuRegistration[] = [] }