From 1ee5e32738f01b7dd95faa9d4f15f2e2a9362238 Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Mon, 17 Jan 2022 13:48:46 +0200 Subject: [PATCH] Support extending KubernetesCluster in extensions Signed-off-by: Panu Horsmalahti --- src/common/catalog-entities/kubernetes-cluster.ts | 2 +- src/main/catalog/catalog-entity-registry.ts | 10 +++++++--- .../init-cluster-frame/init-cluster-frame.ts | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/common/catalog-entities/kubernetes-cluster.ts b/src/common/catalog-entities/kubernetes-cluster.ts index 2dfb3750ff..7ef3c0d9d8 100644 --- a/src/common/catalog-entities/kubernetes-cluster.ts +++ b/src/common/catalog-entities/kubernetes-cluster.ts @@ -60,7 +60,7 @@ export interface KubernetesClusterStatus extends CatalogEntityStatus { export class KubernetesCluster extends CatalogEntity { public static readonly apiVersion = "entity.k8slens.dev/v1alpha1"; - public static readonly kind = "KubernetesCluster"; + public static readonly kind: string = "KubernetesCluster"; public readonly apiVersion = KubernetesCluster.apiVersion; public readonly kind = KubernetesCluster.kind; diff --git a/src/main/catalog/catalog-entity-registry.ts b/src/main/catalog/catalog-entity-registry.ts index 9e9c92f526..63bbb56756 100644 --- a/src/main/catalog/catalog-entity-registry.ts +++ b/src/main/catalog/catalog-entity-registry.ts @@ -4,7 +4,7 @@ */ import { action, computed, IComputedValue, IObservableArray, makeObservable, observable } from "mobx"; -import { CatalogCategoryRegistry, catalogCategoryRegistry, CatalogEntity, CatalogEntityConstructor, CatalogEntityKindData } from "../../common/catalog"; +import { CatalogCategoryRegistry, catalogCategoryRegistry, CatalogEntity, CatalogEntityConstructor } from "../../common/catalog"; import { iter } from "../../common/utils"; export class CatalogEntityRegistry { @@ -43,8 +43,12 @@ export class CatalogEntityRegistry { return this.items.filter((item) => item.apiVersion === apiVersion && item.kind === kind) as T[]; } - getItemsByEntityClass({ apiVersion, kind }: CatalogEntityKindData & CatalogEntityConstructor): T[] { - return this.getItemsForApiKind(apiVersion, kind); + getItemsOfType(Constructor: CatalogEntityConstructor): T[] { + return this.items.filter((item) => item instanceof Constructor) as T[]; + } + + getItemsByEntityClass(constructor: CatalogEntityConstructor): T[] { + return this.getItemsOfType(constructor); } } diff --git a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts index a8ff4e6ad9..54ca0053bf 100644 --- a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts +++ b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts @@ -49,7 +49,8 @@ export const initClusterFrame = // Only load the extensions once the catalog has been populated when( - () => Boolean(catalogEntityRegistry.activeEntity), + // watch for .items, as .activeEntity might be populated only after extensions are loaded (if using custom Catalog Category) + () => catalogEntityRegistry.items.length > 0, () => loadExtensions(catalogEntityRegistry.activeEntity as KubernetesCluster), {