1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

simplify extension's registrations apis

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2020-10-27 16:18:03 +02:00
parent d872e073e3
commit 85087e5cc1
11 changed files with 108 additions and 173 deletions

View File

@ -3,12 +3,7 @@ import { ExampleIcon, ExamplePage } from "./page"
import React from "react" import React from "react"
export default class ExampleExtension extends LensRendererExtension { export default class ExampleExtension extends LensRendererExtension {
onActivate() { clusterPages = [
console.log('EXAMPLE EXTENSION RENDERER: ACTIVATED', this.getMeta());
}
registerClusterPage() {
return [
{ {
path: "/extension-example", path: "/extension-example",
title: "Example Extension", title: "Example Extension",
@ -19,8 +14,3 @@ export default class ExampleExtension extends LensRendererExtension {
} }
] ]
} }
onDeactivate() {
console.log('EXAMPLE EXTENSION RENDERER: DEACTIVATED', this.getMeta());
}
}

View File

@ -3,8 +3,7 @@ import { MetricsFeature } from "./src/metrics-feature"
import React from "react" import React from "react"
export default class ClusterMetricsFeatureExtension extends LensRendererExtension { export default class ClusterMetricsFeatureExtension extends LensRendererExtension {
registerClusterFeatures() { clusterFeatures = [
return [
{ {
title: "Metrics Stack", title: "Metrics Stack",
components: { components: {
@ -22,4 +21,3 @@ export default class ClusterMetricsFeatureExtension extends LensRendererExtensio
} }
] ]
} }
}

View File

@ -3,12 +3,7 @@ import React from "react"
import { NodeMenu, NodeMenuProps } from "./src/node-menu" import { NodeMenu, NodeMenuProps } from "./src/node-menu"
export default class NodeMenuRendererExtension extends LensRendererExtension { export default class NodeMenuRendererExtension extends LensRendererExtension {
async onActivate() { kubeObjectMenuItems = [
console.log("node-menu extension activated")
}
registerKubeObjectMenus() {
return [
{ {
kind: "Node", kind: "Node",
apiVersions: ["v1"], apiVersions: ["v1"],
@ -18,4 +13,3 @@ export default class NodeMenuRendererExtension extends LensRendererExtension {
} }
] ]
} }
}

View File

@ -4,12 +4,7 @@ import { PodLogsMenu, PodLogsMenuProps } from "./src/logs-menu"
import React from "react" import React from "react"
export default class PodMenuRendererExtension extends LensRendererExtension { export default class PodMenuRendererExtension extends LensRendererExtension {
async onActivate() { kubeObjectMenuItems = [
console.log("pod-menu extension activated")
}
registerKubeObjectMenus() {
return [
{ {
kind: "Pod", kind: "Pod",
apiVersions: ["v1"], apiVersions: ["v1"],
@ -26,4 +21,3 @@ export default class PodMenuRendererExtension extends LensRendererExtension {
} }
] ]
} }
}

View File

@ -2,12 +2,7 @@ import { LensMainExtension, windowManager } from "@k8slens/extensions";
import { supportPageURL } from "./src/support.route"; import { supportPageURL } from "./src/support.route";
export default class SupportPageMainExtension extends LensMainExtension { export default class SupportPageMainExtension extends LensMainExtension {
async onActivate() { appMenus = [
console.log("support page extension activated")
}
registerAppMenus() {
return [
{ {
parentId: "help", parentId: "help",
label: "Support", label: "Support",
@ -20,4 +15,3 @@ export default class SupportPageMainExtension extends LensMainExtension {
} }
] ]
} }
}

View File

@ -4,12 +4,7 @@ import { supportPageRoute, supportPageURL } from "./src/support.route";
import { Support } from "./src/support"; import { Support } from "./src/support";
export default class SupportPageRendererExtension extends LensRendererExtension { export default class SupportPageRendererExtension extends LensRendererExtension {
async onActivate() { globalPages = [
console.log("support page extension activated")
}
registerGlobalPages() {
return [
{ {
...supportPageRoute, ...supportPageRoute,
url: supportPageURL(), url: supportPageURL(),
@ -19,10 +14,8 @@ export default class SupportPageRendererExtension extends LensRendererExtension
} }
} }
] ]
}
registerStatusBarItems() { statusBarItems = [
return [
{ {
item: ( item: (
<div <div
@ -36,4 +29,3 @@ export default class SupportPageRendererExtension extends LensRendererExtension
} }
] ]
} }
}

View File

@ -5,14 +5,7 @@ import { tracker } from "./src/tracker"
import React from "react" import React from "react"
export default class TelemetryRendererExtension extends LensRendererExtension { export default class TelemetryRendererExtension extends LensRendererExtension {
async onActivate() { appPreferences = [
console.log("telemetry extension activated")
tracker.start()
await telemetryPreferencesStore.loadExtension(this)
}
registerAppPreferences() {
return [
{ {
title: "Telemetry & Usage Tracking", title: "Telemetry & Usage Tracking",
components: { components: {
@ -20,10 +13,11 @@ export default class TelemetryRendererExtension extends LensRendererExtension {
Input: () => <TelemetryPreferenceInput telemetry={telemetryPreferencesStore}/> Input: () => <TelemetryPreferenceInput telemetry={telemetryPreferencesStore}/>
} }
} }
] ];
}
onDeactivate() { async onActivate() {
console.log("telemetry extension deactivated") console.log("telemetry extension activated")
tracker.start()
await telemetryPreferencesStore.loadExtension(this)
} }
} }

View File

@ -37,25 +37,25 @@ export class ExtensionLoader {
loadOnMain() { loadOnMain() {
logger.info('[EXTENSIONS-LOADER]: load on main') logger.info('[EXTENSIONS-LOADER]: load on main')
this.autoloadExtensions((extension: LensMainExtension) => { this.autoloadExtensions((extension: LensMainExtension) => {
extension.register(menuRegistry, extension.registerAppMenus()) extension.registerTo(menuRegistry, extension.appMenus)
}) })
} }
loadOnClusterManagerRenderer() { loadOnClusterManagerRenderer() {
logger.info('[EXTENSIONS-LOADER]: load on main renderer (cluster manager)') logger.info('[EXTENSIONS-LOADER]: load on main renderer (cluster manager)')
this.autoloadExtensions((extension: LensRendererExtension) => { this.autoloadExtensions((extension: LensRendererExtension) => {
extension.register(globalPageRegistry, extension.registerGlobalPages()) extension.registerTo(globalPageRegistry, extension.globalPages)
extension.register(appPreferenceRegistry, extension.registerAppPreferences()) extension.registerTo(appPreferenceRegistry, extension.appPreferences)
extension.register(clusterFeatureRegistry, extension.registerClusterFeatures()) extension.registerTo(clusterFeatureRegistry, extension.clusterFeatures)
extension.register(statusBarRegistry, extension.registerStatusBarItems()) extension.registerTo(statusBarRegistry, extension.statusBarItems)
}) })
} }
loadOnClusterRenderer() { loadOnClusterRenderer() {
logger.info('[EXTENSIONS-LOADER]: load on cluster renderer (dashboard)') logger.info('[EXTENSIONS-LOADER]: load on cluster renderer (dashboard)')
this.autoloadExtensions((extension: LensRendererExtension) => { this.autoloadExtensions((extension: LensRendererExtension) => {
extension.register(clusterPageRegistry, extension.registerClusterPages()) extension.registerTo(clusterPageRegistry, extension.clusterPages)
extension.register(kubeObjectMenuRegistry, extension.registerKubeObjectMenus()) extension.registerTo(kubeObjectMenuRegistry, extension.kubeObjectMenuItems)
}) })
} }

View File

@ -78,8 +78,8 @@ export class LensExtension implements ExtensionModel {
// mock // mock
} }
register<T = any>(registry: BaseRegistry<T>, registryItems: T[]) { registerTo<T = any>(registry: BaseRegistry<T>, items: T[] = []) {
const disposers = registryItems.map(item => registry.add(item)); const disposers = items.map(item => registry.add(item));
this.disposers.push(...disposers); this.disposers.push(...disposers);
return () => { return () => {
this.disposers = this.disposers.filter(disposer => !disposers.includes(disposer)) this.disposers = this.disposers.filter(disposer => !disposers.includes(disposer))

View File

@ -1,12 +1,7 @@
import { LensExtension } from "./lens-extension"
import type { MenuRegistration } from "./registries/menu-registry"; import type { MenuRegistration } from "./registries/menu-registry";
import { observable } from "mobx";
import { LensExtension } from "./lens-extension"
export class LensMainExtension extends LensExtension { export class LensMainExtension extends LensExtension {
registerAppMenus(): MenuRegistration[] { @observable.shallow appMenus: MenuRegistration[] = []
return []
}
registerPrometheusProviders(): any[] {
return []
}
} }

View File

@ -1,28 +1,12 @@
import { LensExtension } from "./lens-extension"
import type { AppPreferenceRegistration, ClusterFeatureRegistration, KubeObjectMenuRegistration, PageRegistration, StatusBarRegistration } from "./registries" import type { AppPreferenceRegistration, ClusterFeatureRegistration, KubeObjectMenuRegistration, PageRegistration, StatusBarRegistration } from "./registries"
import { observable } from "mobx";
import { LensExtension } from "./lens-extension"
export class LensRendererExtension extends LensExtension { export class LensRendererExtension extends LensExtension {
registerGlobalPages(): PageRegistration[] { @observable.shallow globalPages: PageRegistration[] = []
return [] @observable.shallow clusterPages: PageRegistration[] = []
} @observable.shallow appPreferences: AppPreferenceRegistration[] = []
@observable.shallow clusterFeatures: ClusterFeatureRegistration[] = []
registerClusterPages(): PageRegistration[] { @observable.shallow statusBarItems: StatusBarRegistration[] = []
return [] @observable.shallow kubeObjectMenuItems: KubeObjectMenuRegistration[] = []
}
registerAppPreferences(): AppPreferenceRegistration[] {
return []
}
registerClusterFeatures(): ClusterFeatureRegistration[] {
return []
}
registerStatusBarItems(): StatusBarRegistration[] {
return []
}
registerKubeObjectMenus(): KubeObjectMenuRegistration[] {
return []
}
} }