diff --git a/extensions/example-extension/renderer.tsx b/extensions/example-extension/renderer.tsx index 4deb08558b..4f7937cc89 100644 --- a/extensions/example-extension/renderer.tsx +++ b/extensions/example-extension/renderer.tsx @@ -1,4 +1,4 @@ -import { LensRendererExtension, Registry } from "@k8slens/extensions"; +import { LensRendererExtension } from "@k8slens/extensions"; import { ExamplePage, ExampleIcon } from "./page" import React from "react" @@ -7,17 +7,17 @@ export default class ExampleExtension extends LensRendererExtension { console.log('EXAMPLE EXTENSION RENDERER: ACTIVATED', this.getMeta()); } - registerClusterPage(registry: Registry.ClusterPageRegistry) { - this.disposers.push( - registry.add({ + clusterPages() { + return [ + { path: "/extension-example", title: "Example Extension", components: { Page: () => , MenuIcon: ExampleIcon, } - }) - ) + } + ] } onDeactivate() { diff --git a/extensions/metrics-cluster-feature/renderer.tsx b/extensions/metrics-cluster-feature/renderer.tsx index 2b4b4f07e9..1b94d7ac7d 100644 --- a/extensions/metrics-cluster-feature/renderer.tsx +++ b/extensions/metrics-cluster-feature/renderer.tsx @@ -1,11 +1,11 @@ -import { Registry, LensRendererExtension } from "@k8slens/extensions" +import { LensRendererExtension } from "@k8slens/extensions" import { MetricsFeature } from "./src/metrics-feature" import React from "react" export default class ClusterMetricsFeatureExtension extends LensRendererExtension { - registerClusterFeatures(registry: Registry.ClusterFeatureRegistry) { - this.disposers.push( - registry.add({ + clusterFeatures() { + return [ + { title: "Metrics Stack", components: { Description: () => { @@ -19,7 +19,7 @@ export default class ClusterMetricsFeatureExtension extends LensRendererExtensio } }, feature: new MetricsFeature() - }) - ) + } + ] } } diff --git a/extensions/node-menu/renderer.tsx b/extensions/node-menu/renderer.tsx index b3e3ffd121..b33c922268 100644 --- a/extensions/node-menu/renderer.tsx +++ b/extensions/node-menu/renderer.tsx @@ -1,4 +1,4 @@ -import { Registry, LensRendererExtension } from "@k8slens/extensions"; +import { LensRendererExtension } from "@k8slens/extensions"; import React from "react" import { NodeMenu } from "./src/node-menu" @@ -7,15 +7,15 @@ export default class NodeMenuRendererExtension extends LensRendererExtension { console.log("node-menu extension activated") } - registerKubeObjectMenus(registry: Registry.KubeObjectMenuRegistry) { - this.disposers.push( - registry.add({ + kubeObjectMenus() { + return [ + { kind: "Node", apiVersions: ["v1"], components: { MenuItem: (props) => } - }) - ) + } + ] } } diff --git a/extensions/pod-menu/renderer.tsx b/extensions/pod-menu/renderer.tsx index 1340d835d0..2043253106 100644 --- a/extensions/pod-menu/renderer.tsx +++ b/extensions/pod-menu/renderer.tsx @@ -1,4 +1,4 @@ -import { Registry, LensRendererExtension } from "@k8slens/extensions"; +import { LensRendererExtension } from "@k8slens/extensions"; import { PodShellMenu } from "./src/shell-menu" import { PodLogsMenu } from "./src/logs-menu" import React from "react" @@ -8,24 +8,22 @@ export default class PodMenuRendererExtension extends LensRendererExtension { console.log("pod-menu extension activated") } - registerKubeObjectMenus(registry: Registry.KubeObjectMenuRegistry) { - this.disposers.push( - registry.add({ + kubeObjectMenus() { + return [ + { kind: "Pod", apiVersions: ["v1"], components: { MenuItem: (props) => } - }) - ) - this.disposers.push( - registry.add({ + }, + { kind: "Pod", apiVersions: ["v1"], components: { MenuItem: (props) => } - }) - ) + } + ] } } diff --git a/extensions/support-page/renderer.tsx b/extensions/support-page/renderer.tsx index 84e7f87f65..90a518f30c 100644 --- a/extensions/support-page/renderer.tsx +++ b/extensions/support-page/renderer.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Component, LensRendererExtension, Navigation, Registry } from "@k8slens/extensions"; +import { Component, LensRendererExtension, Navigation } from "@k8slens/extensions"; import { supportPageRoute, supportPageURL } from "./src/support.route"; import { Support } from "./src/support"; @@ -8,22 +8,22 @@ export default class SupportPageRendererExtension extends LensRendererExtension console.log("support page extension activated") } - registerGlobalPage(registry: Registry.GlobalPageRegistry) { - this.disposers.push( - registry.add({ + globalPages() { + return [ + { ...supportPageRoute, url: supportPageURL(), hideInMenu: true, components: { Page: Support, } - }) - ) + } + ] } - registerStatusBarItem(registry: Registry.StatusBarRegistry) { - this.disposers.push( - registry.add({ + statusBarItems() { + return [ + { item: (
Support
) - }) - ) + } + ] } } diff --git a/extensions/telemetry/renderer.tsx b/extensions/telemetry/renderer.tsx index 3988e97097..e8aceccc4f 100644 --- a/extensions/telemetry/renderer.tsx +++ b/extensions/telemetry/renderer.tsx @@ -1,4 +1,4 @@ -import { LensRendererExtension, Registry } from "@k8slens/extensions"; +import { LensRendererExtension } from "@k8slens/extensions"; import { telemetryPreferencesStore } from "./src/telemetry-preferences-store" import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference" import { tracker } from "./src/tracker" @@ -11,16 +11,16 @@ export default class TelemetryRendererExtension extends LensRendererExtension { await telemetryPreferencesStore.loadExtension(this) } - registerAppPreferences(registry: Registry.AppPreferenceRegistry) { - this.disposers.push( - registry.add({ + appPreferences() { + return [ + { title: "Telemetry & Usage Tracking", components: { Hint: () => , Input: () => } - }) - ) + } + ] } onDeactivate() { diff --git a/src/extensions/lens-renderer-extension.ts b/src/extensions/lens-renderer-extension.ts index 4c2e25ebdf..681975e8a8 100644 --- a/src/extensions/lens-renderer-extension.ts +++ b/src/extensions/lens-renderer-extension.ts @@ -1,28 +1,72 @@ import { LensExtension } from "./lens-extension" -import type { GlobalPageRegistry, ClusterPageRegistry, AppPreferenceRegistry, StatusBarRegistry, KubeObjectMenuRegistry, ClusterFeatureRegistry } from "./registries" +import type { GlobalPageRegistry, ClusterPageRegistry, AppPreferenceRegistry, StatusBarRegistry, KubeObjectMenuRegistry, ClusterFeatureRegistry, + PageRegistration, AppPreferenceRegistration, StatusBarRegistration, KubeObjectMenuRegistration, ClusterFeatureRegistration } from "./registries" export class LensRendererExtension extends LensExtension { + /* + * Extensions must implement these + */ + + globalPages(): PageRegistration[] { + return [] + } + + clusterPages(): PageRegistration[] { + return [] + } + + appPreferences(): AppPreferenceRegistration[] { + return [] + } + + clusterFeatures(): ClusterFeatureRegistration[] { + return [] + } + + statusBarItems(): StatusBarRegistration[] { + return [] + } + + kubeObjectMenus(): KubeObjectMenuRegistration[] { + return [] + } + + /* + * these don't need to be exposed to extension developers (can we hide them?) + */ registerGlobalPage(registry: GlobalPageRegistry) { - return + for (let page of this.globalPages()) { + this.disposers.push(registry.add(page)) + } } registerClusterPage(registry: ClusterPageRegistry) { - return + for (let page of this.clusterPages()) { + this.disposers.push(registry.add(page)) + } } registerAppPreferences(registry: AppPreferenceRegistry) { - return + for (let preference of this.appPreferences()) { + this.disposers.push(registry.add(preference)) + } } registerClusterFeatures(registry: ClusterFeatureRegistry) { - return + for (let feature of this.clusterFeatures()) { + this.disposers.push(registry.add(feature)) + } } registerStatusBarItem(registry: StatusBarRegistry) { - return + for (let item of this.statusBarItems()) { + this.disposers.push(registry.add(item)) + } } registerKubeObjectMenus(registry: KubeObjectMenuRegistry) { - return + for (let menu of this.kubeObjectMenus()) { + this.disposers.push(registry.add(menu)) + } } }