From 9a70238596a9e74b911fbc6b33dcbc31318ac0ce Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Wed, 11 Nov 2020 14:05:43 +0200 Subject: [PATCH] allow extensions to regiter extra details Signed-off-by: Jari Kolehmainen --- src/extensions/extension-loader.ts | 1 + src/extensions/lens-renderer-extension.ts | 3 ++- src/extensions/registries/index.ts | 1 + .../kube-object-extra-detail-registry.ts | 22 +++++++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/extensions/registries/kube-object-extra-detail-registry.ts diff --git a/src/extensions/extension-loader.ts b/src/extensions/extension-loader.ts index 78ff1fd3ee..2c3836c538 100644 --- a/src/extensions/extension-loader.ts +++ b/src/extensions/extension-loader.ts @@ -77,6 +77,7 @@ export class ExtensionLoader { registries.clusterPageRegistry.add(...extension.clusterPages), registries.kubeObjectMenuRegistry.add(...extension.kubeObjectMenuItems), registries.kubeObjectDetailRegistry.add(...extension.kubeObjectDetailItems), + registries.kubeObjectExtraDetailRegistry.add(...extension.kubeObjectExtraDetailItems), registries.kubeObjectStatusRegistry.add(...extension.kubeObjectStatusTexts) ]) diff --git a/src/extensions/lens-renderer-extension.ts b/src/extensions/lens-renderer-extension.ts index 8c8735da86..53d84f5790 100644 --- a/src/extensions/lens-renderer-extension.ts +++ b/src/extensions/lens-renderer-extension.ts @@ -1,6 +1,6 @@ import type { AppPreferenceRegistration, ClusterFeatureRegistration, - KubeObjectMenuRegistration, KubeObjectDetailRegistration, + KubeObjectMenuRegistration, KubeObjectDetailRegistration, KubeObjectExtraDetailRegistration, PageRegistration, StatusBarRegistration, KubeObjectStatusRegistration } from "./registries" import { observable } from "mobx"; @@ -14,5 +14,6 @@ export class LensRendererExtension extends LensExtension { @observable.shallow clusterFeatures: ClusterFeatureRegistration[] = [] @observable.shallow statusBarItems: StatusBarRegistration[] = [] @observable.shallow kubeObjectDetailItems: KubeObjectDetailRegistration[] = [] + @observable.shallow kubeObjectExtraDetailItems: KubeObjectExtraDetailRegistration[] = [] @observable.shallow kubeObjectMenuItems: KubeObjectMenuRegistration[] = [] } diff --git a/src/extensions/registries/index.ts b/src/extensions/registries/index.ts index fcb9ad03f2..3d18f26b18 100644 --- a/src/extensions/registries/index.ts +++ b/src/extensions/registries/index.ts @@ -5,6 +5,7 @@ export * from "./menu-registry" export * from "./app-preference-registry" export * from "./status-bar-registry" export * from "./kube-object-detail-registry"; +export * from "./kube-object-extra-detail-registry"; export * from "./kube-object-menu-registry"; export * from "./cluster-feature-registry" export * from "./kube-object-status-registry" diff --git a/src/extensions/registries/kube-object-extra-detail-registry.ts b/src/extensions/registries/kube-object-extra-detail-registry.ts new file mode 100644 index 0000000000..fb10193942 --- /dev/null +++ b/src/extensions/registries/kube-object-extra-detail-registry.ts @@ -0,0 +1,22 @@ +import React from "react" +import { BaseRegistry } from "./base-registry"; + +export interface KubeObjectExtraDetailComponents { + Details: React.ComponentType; +} + +export interface KubeObjectExtraDetailRegistration { + kind: string; + apiVersions: string[]; + components: KubeObjectExtraDetailComponents; +} + +export class KubeObjectExtraDetailRegistry extends BaseRegistry { + getItemsForKind(kind: string, apiVersion: string) { + return this.items.filter((item) => { + return item.kind === kind && item.apiVersions.includes(apiVersion) + }) + } +} + +export const kubeObjectExtraDetailRegistry = new KubeObjectExtraDetailRegistry()