mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
refactor registering extensions
extension implementors do not need to be aware of disposer and registry internals Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com>
This commit is contained in:
parent
e9ebd06664
commit
aa1e18c148
@ -1,4 +1,4 @@
|
|||||||
import { LensRendererExtension, Registry } from "@k8slens/extensions";
|
import { LensRendererExtension } from "@k8slens/extensions";
|
||||||
import { ExamplePage, ExampleIcon } from "./page"
|
import { ExamplePage, ExampleIcon } from "./page"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
|
|
||||||
@ -7,17 +7,17 @@ export default class ExampleExtension extends LensRendererExtension {
|
|||||||
console.log('EXAMPLE EXTENSION RENDERER: ACTIVATED', this.getMeta());
|
console.log('EXAMPLE EXTENSION RENDERER: ACTIVATED', this.getMeta());
|
||||||
}
|
}
|
||||||
|
|
||||||
registerClusterPage(registry: Registry.ClusterPageRegistry) {
|
clusterPages() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
path: "/extension-example",
|
path: "/extension-example",
|
||||||
title: "Example Extension",
|
title: "Example Extension",
|
||||||
components: {
|
components: {
|
||||||
Page: () => <ExamplePage extension={this} />,
|
Page: () => <ExamplePage extension={this} />,
|
||||||
MenuIcon: ExampleIcon,
|
MenuIcon: ExampleIcon,
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeactivate() {
|
onDeactivate() {
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { Registry, LensRendererExtension } from "@k8slens/extensions"
|
import { LensRendererExtension } from "@k8slens/extensions"
|
||||||
import { MetricsFeature } from "./src/metrics-feature"
|
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(registry: Registry.ClusterFeatureRegistry) {
|
clusterFeatures() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
title: "Metrics Stack",
|
title: "Metrics Stack",
|
||||||
components: {
|
components: {
|
||||||
Description: () => {
|
Description: () => {
|
||||||
@ -19,7 +19,7 @@ export default class ClusterMetricsFeatureExtension extends LensRendererExtensio
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
feature: new MetricsFeature()
|
feature: new MetricsFeature()
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Registry, LensRendererExtension } from "@k8slens/extensions";
|
import { LensRendererExtension } from "@k8slens/extensions";
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import { NodeMenu } from "./src/node-menu"
|
import { NodeMenu } from "./src/node-menu"
|
||||||
|
|
||||||
@ -7,15 +7,15 @@ export default class NodeMenuRendererExtension extends LensRendererExtension {
|
|||||||
console.log("node-menu extension activated")
|
console.log("node-menu extension activated")
|
||||||
}
|
}
|
||||||
|
|
||||||
registerKubeObjectMenus(registry: Registry.KubeObjectMenuRegistry) {
|
kubeObjectMenus() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
kind: "Node",
|
kind: "Node",
|
||||||
apiVersions: ["v1"],
|
apiVersions: ["v1"],
|
||||||
components: {
|
components: {
|
||||||
MenuItem: (props) => <NodeMenu {...props} />
|
MenuItem: (props) => <NodeMenu {...props} />
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Registry, LensRendererExtension } from "@k8slens/extensions";
|
import { LensRendererExtension } from "@k8slens/extensions";
|
||||||
import { PodShellMenu } from "./src/shell-menu"
|
import { PodShellMenu } from "./src/shell-menu"
|
||||||
import { PodLogsMenu } from "./src/logs-menu"
|
import { PodLogsMenu } from "./src/logs-menu"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
@ -8,24 +8,22 @@ export default class PodMenuRendererExtension extends LensRendererExtension {
|
|||||||
console.log("pod-menu extension activated")
|
console.log("pod-menu extension activated")
|
||||||
}
|
}
|
||||||
|
|
||||||
registerKubeObjectMenus(registry: Registry.KubeObjectMenuRegistry) {
|
kubeObjectMenus() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
kind: "Pod",
|
kind: "Pod",
|
||||||
apiVersions: ["v1"],
|
apiVersions: ["v1"],
|
||||||
components: {
|
components: {
|
||||||
MenuItem: (props) => <PodShellMenu {...props} />
|
MenuItem: (props) => <PodShellMenu {...props} />
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
)
|
{
|
||||||
this.disposers.push(
|
|
||||||
registry.add({
|
|
||||||
kind: "Pod",
|
kind: "Pod",
|
||||||
apiVersions: ["v1"],
|
apiVersions: ["v1"],
|
||||||
components: {
|
components: {
|
||||||
MenuItem: (props) => <PodLogsMenu {...props} />
|
MenuItem: (props) => <PodLogsMenu {...props} />
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import React from "react";
|
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 { supportPageRoute, supportPageURL } from "./src/support.route";
|
||||||
import { Support } from "./src/support";
|
import { Support } from "./src/support";
|
||||||
|
|
||||||
@ -8,22 +8,22 @@ export default class SupportPageRendererExtension extends LensRendererExtension
|
|||||||
console.log("support page extension activated")
|
console.log("support page extension activated")
|
||||||
}
|
}
|
||||||
|
|
||||||
registerGlobalPage(registry: Registry.GlobalPageRegistry) {
|
globalPages() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
...supportPageRoute,
|
...supportPageRoute,
|
||||||
url: supportPageURL(),
|
url: supportPageURL(),
|
||||||
hideInMenu: true,
|
hideInMenu: true,
|
||||||
components: {
|
components: {
|
||||||
Page: Support,
|
Page: Support,
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
registerStatusBarItem(registry: Registry.StatusBarRegistry) {
|
statusBarItems() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
item: (
|
item: (
|
||||||
<div
|
<div
|
||||||
className="flex align-center gaps hover-highlight"
|
className="flex align-center gaps hover-highlight"
|
||||||
@ -33,7 +33,7 @@ export default class SupportPageRendererExtension extends LensRendererExtension
|
|||||||
<span>Support</span>
|
<span>Support</span>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { LensRendererExtension, Registry } from "@k8slens/extensions";
|
import { LensRendererExtension } from "@k8slens/extensions";
|
||||||
import { telemetryPreferencesStore } from "./src/telemetry-preferences-store"
|
import { telemetryPreferencesStore } from "./src/telemetry-preferences-store"
|
||||||
import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference"
|
import { TelemetryPreferenceHint, TelemetryPreferenceInput } from "./src/telemetry-preference"
|
||||||
import { tracker } from "./src/tracker"
|
import { tracker } from "./src/tracker"
|
||||||
@ -11,16 +11,16 @@ export default class TelemetryRendererExtension extends LensRendererExtension {
|
|||||||
await telemetryPreferencesStore.loadExtension(this)
|
await telemetryPreferencesStore.loadExtension(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
registerAppPreferences(registry: Registry.AppPreferenceRegistry) {
|
appPreferences() {
|
||||||
this.disposers.push(
|
return [
|
||||||
registry.add({
|
{
|
||||||
title: "Telemetry & Usage Tracking",
|
title: "Telemetry & Usage Tracking",
|
||||||
components: {
|
components: {
|
||||||
Hint: () => <TelemetryPreferenceHint />,
|
Hint: () => <TelemetryPreferenceHint />,
|
||||||
Input: () => <TelemetryPreferenceInput telemetry={telemetryPreferencesStore} />
|
Input: () => <TelemetryPreferenceInput telemetry={telemetryPreferencesStore} />
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
)
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
onDeactivate() {
|
onDeactivate() {
|
||||||
|
|||||||
@ -1,28 +1,72 @@
|
|||||||
import { LensExtension } from "./lens-extension"
|
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 {
|
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) {
|
registerGlobalPage(registry: GlobalPageRegistry) {
|
||||||
return
|
for (let page of this.globalPages()) {
|
||||||
|
this.disposers.push(registry.add(page))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerClusterPage(registry: ClusterPageRegistry) {
|
registerClusterPage(registry: ClusterPageRegistry) {
|
||||||
return
|
for (let page of this.clusterPages()) {
|
||||||
|
this.disposers.push(registry.add(page))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerAppPreferences(registry: AppPreferenceRegistry) {
|
registerAppPreferences(registry: AppPreferenceRegistry) {
|
||||||
return
|
for (let preference of this.appPreferences()) {
|
||||||
|
this.disposers.push(registry.add(preference))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerClusterFeatures(registry: ClusterFeatureRegistry) {
|
registerClusterFeatures(registry: ClusterFeatureRegistry) {
|
||||||
return
|
for (let feature of this.clusterFeatures()) {
|
||||||
|
this.disposers.push(registry.add(feature))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerStatusBarItem(registry: StatusBarRegistry) {
|
registerStatusBarItem(registry: StatusBarRegistry) {
|
||||||
return
|
for (let item of this.statusBarItems()) {
|
||||||
|
this.disposers.push(registry.add(item))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
registerKubeObjectMenus(registry: KubeObjectMenuRegistry) {
|
registerKubeObjectMenus(registry: KubeObjectMenuRegistry) {
|
||||||
return
|
for (let menu of this.kubeObjectMenus()) {
|
||||||
|
this.disposers.push(registry.add(menu))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user