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

Clickable StorageClass (#6410)

Signed-off-by: Piotr Roszatycki <piotr.roszatycki@gmail.com>

Signed-off-by: Piotr Roszatycki <piotr.roszatycki@gmail.com>
This commit is contained in:
Piotr Roszatycki 2022-10-14 08:32:56 +02:00 committed by GitHub
parent 491082f784
commit 19a18ebe2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 9 deletions

View File

@ -14,7 +14,7 @@ import { Link } from "react-router-dom";
import { ResourceMetrics } from "../resource-metrics"; import { ResourceMetrics } from "../resource-metrics";
import { VolumeClaimDiskChart } from "./volume-claim-disk-chart"; import { VolumeClaimDiskChart } from "./volume-claim-disk-chart";
import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { KubeObjectDetailsProps } from "../kube-object-details";
import { PersistentVolumeClaim } from "../../../common/k8s-api/endpoints"; import { PersistentVolumeClaim, storageClassApi } from "../../../common/k8s-api/endpoints";
import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
@ -27,6 +27,7 @@ import type { PodStore } from "../+workloads-pods/store";
import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable"; import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable";
import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable";
import podStoreInjectable from "../+workloads-pods/store.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable";
import { stopPropagation } from "../../../renderer/utils";
export interface PersistentVolumeClaimDetailsProps extends KubeObjectDetailsProps<PersistentVolumeClaim> { export interface PersistentVolumeClaimDetailsProps extends KubeObjectDetailsProps<PersistentVolumeClaim> {
} }
@ -78,6 +79,10 @@ class NonInjectedPersistentVolumeClaimDetails extends React.Component<Persistent
const pods = volumeClaim.getPods(podStore.items); const pods = volumeClaim.getPods(podStore.items);
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim); const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim);
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
name: storageClassName,
}));
return ( return (
<div className="PersistentVolumeClaimDetails"> <div className="PersistentVolumeClaimDetails">
{!isMetricHidden && ( {!isMetricHidden && (
@ -97,7 +102,13 @@ class NonInjectedPersistentVolumeClaimDetails extends React.Component<Persistent
{accessModes?.join(", ")} {accessModes?.join(", ")}
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage Class Name"> <DrawerItem name="Storage Class Name">
<Link
key="link"
to={storageClassDetailsUrl}
onClick={stopPropagation}
>
{storageClassName} {storageClassName}
</Link>
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage"> <DrawerItem name="Storage">
{volumeClaim.getStorage()} {volumeClaim.getStorage()}

View File

@ -11,11 +11,12 @@ import { Link } from "react-router-dom";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { DrawerItem, DrawerTitle } from "../drawer"; import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge"; import { Badge } from "../badge";
import { PersistentVolume, persistentVolumeClaimApi } from "../../../common/k8s-api/endpoints"; import { PersistentVolume, persistentVolumeClaimApi, storageClassApi } from "../../../common/k8s-api/endpoints";
import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { KubeObjectDetailsProps } from "../kube-object-details";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import { getDetailsUrl } from "../kube-detail-params"; import { getDetailsUrl } from "../kube-detail-params";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
import { stopPropagation } from "../../../renderer/utils";
export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> { export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> {
} }
@ -37,6 +38,10 @@ export class PersistentVolumeDetails extends React.Component<PersistentVolumeDet
const { accessModes, capacity, persistentVolumeReclaimPolicy, storageClassName, claimRef, flexVolume, mountOptions, nfs } = volume.spec; const { accessModes, capacity, persistentVolumeReclaimPolicy, storageClassName, claimRef, flexVolume, mountOptions, nfs } = volume.spec;
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
name: storageClassName,
}));
return ( return (
<div className="PersistentVolumeDetails"> <div className="PersistentVolumeDetails">
<KubeObjectMeta object={volume} /> <KubeObjectMeta object={volume} />
@ -57,7 +62,13 @@ export class PersistentVolumeDetails extends React.Component<PersistentVolumeDet
{persistentVolumeReclaimPolicy} {persistentVolumeReclaimPolicy}
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage Class Name"> <DrawerItem name="Storage Class Name">
<Link
key="link"
to={storageClassDetailsUrl}
onClick={stopPropagation}
>
{storageClassName} {storageClassName}
</Link>
</DrawerItem> </DrawerItem>
<DrawerItem name="Status" labelsOnly> <DrawerItem name="Status" labelsOnly>
<Badge label={volume.getStatus()} /> <Badge label={volume.getStatus()} />