1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/components/kube-object/kube-object-meta.tsx
Sebastian Malton b1ff34879a cleanup Lens repo with tighter linting
Signed-off-by: Sebastian Malton <smalton@mirantis.com>
2020-07-09 17:00:23 -04:00

87 lines
2.9 KiB
TypeScript

import React from "react";
import { Trans } from "@lingui/macro";
import { IKubeMetaField, KubeObject } from "../../api/kube-object";
import { DrawerItem, DrawerItemLabels } from "../drawer";
import { getDetailsUrl } from "../../navigation";
import { lookupApiLink } from "../../api/kube-api";
import { Link } from "react-router-dom";
export interface Props {
object: KubeObject;
hideFields?: IKubeMetaField[];
}
export class KubeObjectMeta extends React.Component<Props> {
static defaultHiddenFields: IKubeMetaField[] = [
"uid", "resourceVersion", "selfLink"
];
isHidden(field: IKubeMetaField): boolean {
const { hideFields = KubeObjectMeta.defaultHiddenFields } = this.props;
return hideFields.includes(field);
}
render(): JSX.Element {
const object = this.props.object;
const {
getName, getNs, getLabels, selfLink,
getAnnotations, getFinalizers, getId, getAge,
metadata: { creationTimestamp },
} = object;
const ownerRefs = object.getOwnerRefs();
return (
<>
<DrawerItem name={<Trans>Created</Trans>} hidden={this.isHidden("creationTimestamp")}>
{getAge(true, false)} <Trans>ago</Trans> ({creationTimestamp})
</DrawerItem>
<DrawerItem name={<Trans>Name</Trans>} hidden={this.isHidden("name")}>
{getName()}
</DrawerItem>
<DrawerItem name={<Trans>Namespace</Trans>} hidden={this.isHidden("namespace") || !getNs()}>
{getNs()}
</DrawerItem>
<DrawerItem name={<Trans>UID</Trans>} hidden={this.isHidden("uid")}>
{getId()}
</DrawerItem>
<DrawerItem name={<Trans>Link</Trans>} hidden={this.isHidden("selfLink")}>
{selfLink}
</DrawerItem>
<DrawerItem name={<Trans>Resource Version</Trans>} hidden={this.isHidden("resourceVersion")}>
{object.metadata.resourceVersion}
</DrawerItem>
<DrawerItemLabels
name={<Trans>Labels</Trans>}
labels={getLabels()}
hidden={this.isHidden("labels")}
/>
<DrawerItemLabels
name={<Trans>Annotations</Trans>}
labels={getAnnotations()}
hidden={this.isHidden("annotations")}
/>
<DrawerItemLabels
name={<Trans>Finalizers</Trans>}
labels={getFinalizers()}
hidden={this.isHidden("finalizers")}
/>
{ownerRefs && ownerRefs.length > 0 &&
<DrawerItem name={<Trans>Controlled By</Trans>} hidden={this.isHidden("ownerReferences")}>
{
ownerRefs.map(ref => {
const { name, kind } = ref;
const ownerDetailsUrl = getDetailsUrl(lookupApiLink(ref, object));
return (
<p key={name}>
{kind} <Link to={ownerDetailsUrl}>{name}</Link>
</p>
);
})
}
</DrawerItem>
}
</>
);
}
}