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

custom columns for kubernetes cluster catalog category

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen 2022-06-13 18:04:16 +03:00
parent 808875f491
commit 9a2958bf39
9 changed files with 131 additions and 4 deletions

View File

@ -132,6 +132,14 @@ export class KubernetesCluster<
break;
}
}
get k8sVersion() {
return this.metadata.kubeVersion?.replace("unknown", "") || "";
}
get k8sDistro() {
return this.metadata.distro?.replace("unknown", "") || "";
}
}
export class KubernetesClusterCategory extends CatalogCategory {

View File

@ -4,12 +4,10 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { KubernetesClusterCategory } from "../../catalog-entities/kubernetes-cluster";
import { builtInCategoryInjectionToken } from "../category-registry.injectable";
const kubernetesClusterCategoryInjectable = getInjectable({
id: "kubernetes-cluster-category",
instantiate: () => new KubernetesClusterCategory(),
injectionToken: builtInCategoryInjectionToken,
});
export default kubernetesClusterCategoryInjectable;

View File

@ -0,0 +1,10 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { KubernetesClusterCategory } from "../../common/catalog-entities/kubernetes-cluster";
export {
KubernetesClusterCategory,
};

View File

@ -0,0 +1,15 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { KubernetesClusterCategory } from "../../catalog-entities/kubernetes-cluster";
import { builtInCategoryInjectionToken } from "../../../common/catalog/category-registry.injectable";
const kubernetesClusterCategoryInjectable = getInjectable({
id: "kubernetes-cluster-category-main",
instantiate: () => new KubernetesClusterCategory(),
injectionToken: builtInCategoryInjectionToken,
});
export default kubernetesClusterCategoryInjectable;

View File

@ -42,7 +42,7 @@ import hotbarStoreInjectable from "../common/hotbars/store.injectable";
import { bindEvents } from "./navigation/events";
import openDeleteClusterDialogInjectable from "./components/delete-cluster-dialog/open.injectable";
import { init } from "@sentry/electron/renderer";
import kubernetesClusterCategoryInjectable from "../common/catalog/categories/kubernetes-cluster.injectable";
import kubernetesClusterCategoryInjectable from "./catalog/categories/kubernetes-cluster.injectable";
import autoRegistrationInjectable from "../common/k8s-api/api-manager/auto-registration.injectable";
import assert from "assert";
import startFrameInjectable from "./start-frame/start-frame.injectable";

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import kubernetesClusterCategoryInjectable from "../../catalog/categories/kubernetes-cluster.injectable";
import type { KubernetesClusterCategory } from "../kubernetes-cluster";

View File

@ -0,0 +1,18 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
.statusCell {
max-width: 100px;
:global {
.connected, .available {
color: var(--colorSuccess);
}
.disconnected, .deleting, .unavailable {
color: var(--halfGray);
}
}
}

View File

@ -0,0 +1,63 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import React from "react";
import { categoryVersion } from "../../common/catalog";
import type { CatalogCategorySpec, CatalogEntityConstructor } from "../../common/catalog";
import { KubernetesCluster, KubernetesClusterCategory as KubernetesClusterCommonCategory } from "../../common/catalog-entities";
import styles from "./kubernetes-cluster.module.scss";
export class KubernetesClusterCategory extends KubernetesClusterCommonCategory {
public spec: CatalogCategorySpec = {
group: "entity.k8slens.dev",
versions: [
categoryVersion("v1alpha1", KubernetesCluster as CatalogEntityConstructor<KubernetesCluster>),
],
names: {
kind: "KubernetesCluster",
},
displayColumns: [
{
id: "distro",
priority: 30,
renderCell: entity => (
<span key="distro">
{(entity as KubernetesCluster).k8sDistro}
</span>
),
titleProps: {
title: "Distro",
},
},
{
id: "api-version",
priority: 30,
renderCell: entity => (
<span key="api-version">
{(entity as KubernetesCluster).k8sVersion}
</span>
),
titleProps: {
title: "Version",
},
},
{
id: "status",
priority: 50,
renderCell: entity => (
<span key="phase" className={entity.status.phase}>
{entity.status.phase}
</span>
),
titleProps: {
title: "Status",
className: styles.statusCell,
},
searchFilter: entity => entity.status.phase,
sortCallback: entity => entity.status.phase,
},
],
};
}

View File

@ -0,0 +1,15 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { KubernetesClusterCategory } from "../../catalog-entities/kubernetes-cluster";
import { builtInCategoryInjectionToken } from "../../../common/catalog/category-registry.injectable";
const kubernetesClusterCategoryInjectable = getInjectable({
id: "kubernetes-cluster-category-renderer",
instantiate: () => new KubernetesClusterCategory(),
injectionToken: builtInCategoryInjectionToken,
});
export default kubernetesClusterCategoryInjectable;