Lens restructure (#540)

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman authored and GitHub committed 2020-06-30 14:35:16 +03:00
1 parent e810eab39f
commit b7974827d2
786 files changed
+14567 -24066

No files matched your search

@@ -0,0 +1,4 @@
export * from "./storage-classes.route"
export * from "./storage-classes"
export * from "./storage-class-details"
@@ -0,0 +1,3 @@
.StorageClassDetails {
}
@@ -0,0 +1,67 @@
import "./storage-class-details.scss";
import React from "react";
import startCase from "lodash/startCase";
import { t, Trans } from "@lingui/macro";
import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge";
import { KubeEventDetails } from "../+events/kube-event-details";
import { observer } from "mobx-react";
import { KubeObjectDetailsProps } from "../kube-object";
import { StorageClass, storageClassApi } from "../../api/endpoints";
import { _i18n } from "../../i18n";
import { apiManager } from "../../api/api-manager";
import { KubeObjectMeta } from "../kube-object/kube-object-meta";
interface Props extends KubeObjectDetailsProps<StorageClass> {
}
@observer
export class StorageClassDetails extends React.Component<Props> {
render() {
const { object: storageClass } = this.props;
if (!storageClass) return null;
const { provisioner, parameters, mountOptions } = storageClass;
return (
<div className="StorageClassDetails">
<KubeObjectMeta object={storageClass}/>
{provisioner && (
<DrawerItem name={<Trans>Provisioner</Trans>} labelsOnly>
<Badge label={provisioner}/>
</DrawerItem>
)}
<DrawerItem name={<Trans>Volume Binding Mode</Trans>}>
{storageClass.getVolumeBindingMode()}
</DrawerItem>
<DrawerItem name={<Trans>Reclaim Policy</Trans>}>
{storageClass.getReclaimPolicy()}
</DrawerItem>
{mountOptions && (
<DrawerItem name={<Trans>Mount Options</Trans>}>
{mountOptions.join(", ")}
</DrawerItem>
)}
{parameters && (
<>
<DrawerTitle title={_i18n._(t`Parameters`)}/>
{
Object.entries(parameters).map(([name, value]) => (
<DrawerItem key={name + value} name={startCase(name)}>
{value}
</DrawerItem>
))
}
</>
)}
<KubeEventDetails object={storageClass}/>
</div>
);
}
}
apiManager.registerViews(storageClassApi, {
Details: StorageClassDetails
})
@@ -0,0 +1,12 @@
import { KubeObjectStore } from "../../kube-object.store";
import { autobind } from "../../utils";
import { StorageClass, storageClassApi } from "../../api/endpoints/storage-class.api";
import { apiManager } from "../../api/api-manager";
@autobind()
export class StorageClassStore extends KubeObjectStore<StorageClass> {
api = storageClassApi
}
export const storageClassStore = new StorageClassStore();
apiManager.registerStore(storageClassApi, storageClassStore);
@@ -0,0 +1,12 @@
import { RouteProps } from "react-router"
import { buildURL } from "../../navigation";
export const storageClassesRoute: RouteProps = {
path: "/storage-classes"
}
export interface IStorageClassesRouteParams {
}
export const storageClassesURL = buildURL<IStorageClassesRouteParams>(storageClassesRoute.path)
@@ -0,0 +1,7 @@
.StorageClasses {
.TableCell {
&.is-default {
flex: .5;
}
}
}
@@ -0,0 +1,72 @@
import "./storage-classes.scss"
import React from "react";
import { RouteComponentProps } from "react-router-dom";
import { observer } from "mobx-react";
import { Trans } from "@lingui/macro";
import { StorageClass, storageClassApi } from "../../api/endpoints/storage-class.api";
import { KubeObjectMenu, KubeObjectMenuProps } from "../kube-object/kube-object-menu";
import { KubeObjectListLayout } from "../kube-object";
import { IStorageClassesRouteParams } from "./storage-classes.route";
import { storageClassStore } from "./storage-class.store";
import { apiManager } from "../../api/api-manager";
enum sortBy {
name = "name",
age = "age",
provisioner = "provision",
reclaimPolicy = "reclaim",
}
interface Props extends RouteComponentProps<IStorageClassesRouteParams> {
}
@observer
export class StorageClasses extends React.Component<Props> {
render() {
return (
<KubeObjectListLayout
className="StorageClasses"
store={storageClassStore} isClusterScoped
sortingCallbacks={{
[sortBy.name]: (item: StorageClass) => item.getName(),
[sortBy.age]: (item: StorageClass) => item.metadata.creationTimestamp,
[sortBy.provisioner]: (item: StorageClass) => item.provisioner,
[sortBy.reclaimPolicy]: (item: StorageClass) => item.reclaimPolicy,
}}
searchFilters={[
(item: StorageClass) => item.getSearchFields(),
(item: StorageClass) => item.provisioner,
]}
renderHeaderTitle={<Trans>Storage Classes</Trans>}
renderTableHeader={[
{ title: <Trans>Name</Trans>, className: "name", sortBy: sortBy.name },
{ title: <Trans>Provisioner</Trans>, className: "provisioner", sortBy: sortBy.provisioner },
{ title: <Trans>Reclaim Policy</Trans>, className: "reclaim-policy", sortBy: sortBy.reclaimPolicy },
{ title: <Trans>Default</Trans>, className: "is-default" },
{ title: <Trans>Age</Trans>, className: "age", sortBy: sortBy.age },
]}
renderTableContents={(storageClass: StorageClass) => [
storageClass.getName(),
storageClass.provisioner,
storageClass.getReclaimPolicy(),
storageClass.isDefault() ? <Trans>Yes</Trans> : null,
storageClass.getAge(),
]}
renderItemMenu={(item: StorageClass) => {
return <StorageClassMenu object={item}/>
}}
/>
)
}
}
export function StorageClassMenu(props: KubeObjectMenuProps<StorageClass>) {
return (
<KubeObjectMenu {...props}/>
)
}
apiManager.registerViews(storageClassApi, {
Menu: StorageClassMenu,
})