1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/+storage-volumes/volume-details-list.tsx
vshakirova 937128fb82 Add persistent volumes info to storage class submenu
Signed-off-by: vshakirova <vshakirova@mirantis.com>
2021-02-23 18:12:19 +04:00

89 lines
2.9 KiB
TypeScript

import "./volume-details-list.scss";
import React from "react";
import { observer } from "mobx-react";
import { PersistentVolume } from "../../api/endpoints/persistent-volume.api";
import { autobind } from "../../../common/utils/autobind";
import { TableRow } from "../table/table-row";
import { cssNames, prevDefault } from "../../utils";
import { showDetails } from "../kube-object/kube-object-details";
import { TableCell } from "../table/table-cell";
import { Spinner } from "../spinner/spinner";
import { DrawerTitle } from "../drawer/drawer-title";
import { Table } from "../table/table";
import { TableHead } from "../table/table-head";
import { volumesStore } from "./volumes.store";
import kebabCase from "lodash/kebabCase";
interface Props {
persistentVolumes: PersistentVolume[];
}
enum sortBy {
name = "name",
status = "status",
capacity = "capacity",
}
@observer
export class VolumeDetailsList extends React.Component<Props> {
private sortingCallbacks = {
[sortBy.name]: (volume: PersistentVolume) => volume.getName(),
[sortBy.capacity]: (volume: PersistentVolume) => volume.getCapacity(),
[sortBy.status]: (volume: PersistentVolume) => volume.getStatus(),
};
@autobind()
getTableRow(uid: string) {
const { persistentVolumes } = this.props;
const volume = persistentVolumes.find(volume => volume.getId() === uid);
return (
<TableRow
key={volume.getId()}
sortItem={volume}
nowrap
onClick={prevDefault(() => showDetails(volume.selfLink, false))}
>
<TableCell className="name">{volume.getName()}</TableCell>
<TableCell className="capacity">{volume.getCapacity()}</TableCell>
<TableCell className={cssNames("status", kebabCase(volume.getStatus()))}>{volume.getStatus()}</TableCell>
</TableRow>
);
}
render() {
const { persistentVolumes } = this.props;
const virtual = persistentVolumes.length > 100;
if (!persistentVolumes.length) {
return !volumesStore.isLoaded && <Spinner center/>;
}
return (
<div className="VolumeDetailsList flex column">
<DrawerTitle title="Persistent Volumes"/>
<Table
items={persistentVolumes}
selectable
virtual={virtual}
sortable={this.sortingCallbacks}
sortByDefault={{ sortBy: sortBy.name, orderBy: "desc" }}
sortSyncWithUrl={false}
getTableRow={this.getTableRow}
className="box grow"
>
<TableHead>
<TableCell className="name" sortBy={sortBy.name}>Name</TableCell>
<TableCell className="capacity" sortBy={sortBy.capacity}>Capacity</TableCell>
<TableCell className="status" sortBy={sortBy.status}>Status</TableCell>
</TableHead>
{
!virtual && persistentVolumes.map(volume => this.getTableRow(volume.getId()))
}
</Table>
</div>
);
}
}