mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
110 lines
3.3 KiB
TypeScript
110 lines
3.3 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import "./storage-class-details.scss";
|
|
|
|
import React from "react";
|
|
import startCase from "lodash/startCase";
|
|
import { DrawerItem, DrawerTitle } from "../drawer";
|
|
import { Badge } from "../badge";
|
|
import { disposeOnUnmount, observer } from "mobx-react";
|
|
import type { KubeObjectDetailsProps } from "../kube-object-details";
|
|
import { StorageClass } from "../../../common/k8s-api/endpoints";
|
|
import { KubeObjectMeta } from "../kube-object-meta";
|
|
import { storageClassStore } from "./storage-class.store";
|
|
import { VolumeDetailsList } from "../+storage-volumes/volume-details-list";
|
|
import { volumesStore } from "../+storage-volumes/volumes.store";
|
|
import logger from "../../../common/logger";
|
|
import type { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";
|
|
import type { KubeObject } from "../../../common/k8s-api/kube-object";
|
|
import type { Disposer } from "../../../common/utils";
|
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
|
import kubeWatchApiInjectable
|
|
from "../../kube-watch-api/kube-watch-api.injectable";
|
|
|
|
interface Props extends KubeObjectDetailsProps<StorageClass> {
|
|
}
|
|
|
|
interface Dependencies {
|
|
subscribeStores: (stores: KubeObjectStore<KubeObject>[]) => Disposer;
|
|
}
|
|
|
|
@observer
|
|
class NonInjectedStorageClassDetails extends React.Component<Props & Dependencies> {
|
|
componentDidMount() {
|
|
disposeOnUnmount(this, [
|
|
this.props.subscribeStores([
|
|
volumesStore,
|
|
]),
|
|
]);
|
|
}
|
|
|
|
render() {
|
|
const { object: storageClass } = this.props;
|
|
|
|
if (!storageClass) {
|
|
return null;
|
|
}
|
|
|
|
if (!(storageClass instanceof StorageClass)) {
|
|
logger.error("[StorageClassDetails]: passed object that is not an instanceof StorageClass", storageClass);
|
|
|
|
return null;
|
|
}
|
|
|
|
const persistentVolumes = storageClassStore.getPersistentVolumes(storageClass);
|
|
const { provisioner, parameters, mountOptions } = storageClass;
|
|
|
|
return (
|
|
<div className="StorageClassDetails">
|
|
<KubeObjectMeta object={storageClass}/>
|
|
|
|
{provisioner && (
|
|
<DrawerItem name="Provisioner" labelsOnly>
|
|
<Badge label={provisioner}/>
|
|
</DrawerItem>
|
|
)}
|
|
<DrawerItem name="Volume Binding Mode">
|
|
{storageClass.getVolumeBindingMode()}
|
|
</DrawerItem>
|
|
<DrawerItem name="Reclaim Policy">
|
|
{storageClass.getReclaimPolicy()}
|
|
</DrawerItem>
|
|
|
|
{mountOptions && (
|
|
<DrawerItem name="Mount Options">
|
|
{mountOptions.join(", ")}
|
|
</DrawerItem>
|
|
)}
|
|
{parameters && (
|
|
<>
|
|
<DrawerTitle title="Parameters"/>
|
|
{
|
|
Object.entries(parameters).map(([name, value]) => (
|
|
<DrawerItem key={name + value} name={startCase(name)}>
|
|
{value}
|
|
</DrawerItem>
|
|
))
|
|
}
|
|
</>
|
|
)}
|
|
<VolumeDetailsList persistentVolumes={persistentVolumes}/>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
export const StorageClassDetails = withInjectables<Dependencies, Props>(
|
|
NonInjectedStorageClassDetails,
|
|
|
|
{
|
|
getProps: (di, props) => ({
|
|
subscribeStores: di.inject(kubeWatchApiInjectable).subscribeStores,
|
|
...props,
|
|
}),
|
|
},
|
|
);
|
|
|