Events
-
- {events.map(evt => {
- const { message, count, lastTimestamp, involvedObject } = evt;
-
- return (
-
-
- {message}
+ {events.length > 0 && (
+
+ {events.map(event => (
+
+
+ {event.message}
- {evt.getSource()}
+ {event.getSource()}
- {count}
+ {event.count}
- {involvedObject.fieldPath}
+ {event.involvedObject.fieldPath}
-
+
- );
- })}
-
+ ))}
+
+ )}
);
}
diff --git a/src/renderer/components/+events/kube-event-icon.tsx b/src/renderer/components/+events/kube-event-icon.tsx
index 7b6f224847..80cb59d9d6 100644
--- a/src/renderer/components/+events/kube-event-icon.tsx
+++ b/src/renderer/components/+events/kube-event-icon.tsx
@@ -11,6 +11,7 @@ import type { KubeObject } from "../../../common/k8s-api/kube-object";
import { eventStore } from "./event.store";
import { cssNames } from "../../utils";
import type { KubeEvent } from "../../../common/k8s-api/endpoints/events.api";
+import { KubeObjectAge } from "../kube-object/age";
export interface KubeEventIconProps {
object: KubeObject;
@@ -48,7 +49,7 @@ export class KubeEventIcon extends React.Component
{
{event.message}
- {event.getAge(undefined, undefined, true)}
+
),
diff --git a/src/renderer/components/+helm-releases/release-details/release-details.tsx b/src/renderer/components/+helm-releases/release-details/release-details.tsx
index 6a2a71a8fd..4346b11691 100644
--- a/src/renderer/components/+helm-releases/release-details/release-details.tsx
+++ b/src/renderer/components/+helm-releases/release-details/release-details.tsx
@@ -33,6 +33,8 @@ import releaseInjectable from "./release.injectable";
import releaseDetailsInjectable from "./release-details.injectable";
import releaseValuesInjectable from "./release-values.injectable";
import userSuppliedValuesAreShownInjectable from "./user-supplied-values-are-shown.injectable";
+import type { KubeObject } from "../../../../common/k8s-api/kube-object";
+import { KubeObjectAge } from "../../kube-object/age";
export interface ReleaseDetailsProps {
hideDetails(): void;
@@ -150,45 +152,46 @@ class NonInjectedReleaseDetails extends Component
item.kind);
- const tables = Object.entries(groups).map(([kind, items]) => {
- return (
-
-
-
-
- Name
- {items[0].getNs() && Namespace}
- Age
-
- {items.map(item => {
- const name = item.getName();
- const namespace = item.getNs();
- const api = apiManager.getApi(api => api.kind === kind && api.apiVersionWithGroup == item.apiVersion);
- const detailsUrl = api ? getDetailsUrl(api.getUrl({ name, namespace })) : "";
-
- return (
-
-
- {detailsUrl ? {name} : name}
-
- {namespace && {namespace}}
- {item.getAge()}
-
- );
- })}
-
-
- );
- });
-
+ renderResources(resources: KubeObject[]) {
return (
- {tables}
+ {
+ Object.entries(groupBy(resources, item => item.kind))
+ .map(([kind, items]) => (
+
+
+
+
+ Name
+ {items[0].getNs() && Namespace}
+ Age
+
+ {items.map(item => {
+ const name = item.getName();
+ const namespace = item.getNs();
+ const api = apiManager.getApi(api => api.kind === kind && api.apiVersionWithGroup == item.apiVersion);
+ const detailsUrl = api ? getDetailsUrl(api.getUrl({ name, namespace })) : "";
+
+ return (
+
+
+ {detailsUrl ? {name} : name}
+
+ {namespace && (
+
+ {namespace}
+
+ )}
+
+
+
+
+ );
+ })}
+
+
+ ))
+ }
);
}
@@ -200,6 +203,8 @@ class NonInjectedReleaseDetails extends Component;
}
+ const { resources } = this.details;
+
return (
@@ -236,7 +241,7 @@ class NonInjectedReleaseDetails extends Component
{this.renderNotes()}
- {this.renderResources()}
+ {resources && this.renderResources(resources)}
);
}
diff --git a/src/renderer/components/+namespaces/route.tsx b/src/renderer/components/+namespaces/route.tsx
index a40b6cb981..b1bf0601d0 100644
--- a/src/renderer/components/+namespaces/route.tsx
+++ b/src/renderer/components/+namespaces/route.tsx
@@ -19,6 +19,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "./namespace-store/namespace-store.injectable";
import addNamespaceDialogModelInjectable
from "./add-namespace-dialog-model/add-namespace-dialog-model.injectable";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -43,14 +44,14 @@ export const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDia
className="Namespaces"
store={namespaceStore}
sortingCallbacks={{
- [columnId.name]: ns => ns.getName(),
- [columnId.labels]: ns => ns.getLabels(),
- [columnId.age]: ns => ns.getTimeDiffFromNow(),
- [columnId.status]: ns => ns.getStatus(),
+ [columnId.name]: namespace => namespace.getName(),
+ [columnId.labels]: namespace => namespace.getLabels(),
+ [columnId.age]: namespace => -namespace.getCreationTimestamp(),
+ [columnId.status]: namespace => namespace.getStatus(),
}}
searchFilters={[
- item => item.getSearchFields(),
- item => item.getStatus(),
+ namespace => namespace.getSearchFields(),
+ namespace => namespace.getStatus(),
]}
renderHeaderTitle="Namespaces"
renderTableHeader={[
@@ -60,12 +61,12 @@ export const NonInjectedNamespacesRoute = ({ namespaceStore, openAddNamespaceDia
{ title: "Age", className: "age", sortBy: columnId.age, id: columnId.age },
{ title: "Status", className: "status", sortBy: columnId.status, id: columnId.status },
]}
- renderTableContents={item => [
- item.getName(),
- ,
- item.getLabels().map(label => ),
- item.getAge(),
- { title: item.getStatus(), className: item.getStatus().toLowerCase() },
+ renderTableContents={namespace => [
+ namespace.getName(),
+ ,
+ namespace.getLabels().map(label => ),
+ ,
+ { title: namespace.getStatus(), className: namespace.getStatus().toLowerCase() },
]}
addRemoveButtons={{
addTooltip: "Add Namespace",
diff --git a/src/renderer/components/+network-endpoints/endpoints.tsx b/src/renderer/components/+network-endpoints/endpoints.tsx
index f5d5b31911..0c5595be54 100644
--- a/src/renderer/components/+network-endpoints/endpoints.tsx
+++ b/src/renderer/components/+network-endpoints/endpoints.tsx
@@ -12,6 +12,7 @@ import { endpointStore } from "./endpoints.store";
import { KubeObjectListLayout } from "../kube-object-list-layout";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { EndpointRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -34,7 +35,7 @@ export class Endpoints extends React.Component {
sortingCallbacks={{
[columnId.name]: endpoint => endpoint.getName(),
[columnId.namespace]: endpoint => endpoint.getNs(),
- [columnId.age]: endpoint => endpoint.getTimeDiffFromNow(),
+ [columnId.age]: endpoint => -endpoint.getCreationTimestamp(),
}}
searchFilters={[
endpoint => endpoint.getSearchFields(),
@@ -52,7 +53,7 @@ export class Endpoints extends React.Component {
,
endpoint.getNs(),
endpoint.toString(),
- endpoint.getAge(),
+ ,
]}
tableProps={{
customRowHeights: (item, lineHeight, paddings) => {
diff --git a/src/renderer/components/+network-ingresses/ingresses.tsx b/src/renderer/components/+network-ingresses/ingresses.tsx
index 21aa2ca207..d86fb98079 100644
--- a/src/renderer/components/+network-ingresses/ingresses.tsx
+++ b/src/renderer/components/+network-ingresses/ingresses.tsx
@@ -12,6 +12,7 @@ import { ingressStore } from "./ingress.store";
import { KubeObjectListLayout } from "../kube-object-list-layout";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { IngressRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -35,7 +36,7 @@ export class Ingresses extends React.Component {
sortingCallbacks={{
[columnId.name]: ingress => ingress.getName(),
[columnId.namespace]: ingress => ingress.getNs(),
- [columnId.age]: ingress => ingress.getTimeDiffFromNow(),
+ [columnId.age]: ingress => -ingress.getCreationTimestamp(),
}}
searchFilters={[
ingress => ingress.getSearchFields(),
@@ -56,7 +57,7 @@ export class Ingresses extends React.Component {
ingress.getNs(),
ingress.getLoadBalancers().map(lb => {lb}
),
ingress.getRoutes().map(route => {route}
),
- ingress.getAge(),
+ ,
]}
tableProps={{
customRowHeights: (item, lineHeight, paddings) => {
diff --git a/src/renderer/components/+network-policies/network-policies.tsx b/src/renderer/components/+network-policies/network-policies.tsx
index db3701ae45..c226f090d6 100644
--- a/src/renderer/components/+network-policies/network-policies.tsx
+++ b/src/renderer/components/+network-policies/network-policies.tsx
@@ -12,6 +12,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout";
import { networkPolicyStore } from "./network-policy.store";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { NetworkPoliciesRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -30,14 +31,15 @@ export class NetworkPolicies extends React.Component {
item.getName(),
- [columnId.namespace]: item => item.getNs(),
- [columnId.age]: item => item.getTimeDiffFromNow(),
+ [columnId.name]: networkPolicy => networkPolicy.getName(),
+ [columnId.namespace]: networkPolicy => networkPolicy.getNs(),
+ [columnId.age]: networkPolicy => -networkPolicy.getCreationTimestamp(),
}}
searchFilters={[
- item => item.getSearchFields(),
+ networkPolicy => networkPolicy.getSearchFields(),
]}
renderHeaderTitle="Network Policies"
renderTableHeader={[
@@ -47,12 +49,12 @@ export class NetworkPolicies extends React.Component {
{ title: "Policy Types", className: "type", id: columnId.types },
{ title: "Age", className: "age", sortBy: columnId.age, id: columnId.age },
]}
- renderTableContents={item => [
- item.getName(),
- ,
- item.getNs(),
- item.getTypes().join(", "),
- item.getAge(),
+ renderTableContents={networkPolicy => [
+ networkPolicy.getName(),
+ ,
+ networkPolicy.getNs(),
+ networkPolicy.getTypes().join(", "),
+ ,
]}
/>
);
diff --git a/src/renderer/components/+network-services/services.tsx b/src/renderer/components/+network-services/services.tsx
index 78cb97907c..57107f1fc2 100644
--- a/src/renderer/components/+network-services/services.tsx
+++ b/src/renderer/components/+network-services/services.tsx
@@ -13,6 +13,7 @@ import { Badge } from "../badge";
import { serviceStore } from "./services.store";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { ServicesRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -44,7 +45,7 @@ export class Services extends React.Component {
[columnId.ports]: service => (service.spec.ports || []).map(({ port }) => port)[0],
[columnId.clusterIp]: service => service.getClusterIp(),
[columnId.type]: service => service.getType(),
- [columnId.age]: service => service.getTimeDiffFromNow(),
+ [columnId.age]: service => -service.getCreationTimestamp(),
[columnId.status]: service => service.getStatus(),
}}
searchFilters={[
@@ -81,7 +82,7 @@ export class Services extends React.Component {
service.getPorts().join(", "),
externalIps.join(", ") || "-",
service.getSelector().map(label => ),
- service.getAge(),
+ ,
{ title: service.getStatus(), className: service.getStatus().toLowerCase() },
];
}}
diff --git a/src/renderer/components/+nodes/route.tsx b/src/renderer/components/+nodes/route.tsx
index a4b4cbb660..9ca6874743 100644
--- a/src/renderer/components/+nodes/route.tsx
+++ b/src/renderer/components/+nodes/route.tsx
@@ -23,6 +23,7 @@ import { eventStore } from "../+events/event.store";
import type { NodesRouteParams } from "../../../common/routes";
import { makeObservable, observable } from "mobx";
import isEmpty from "lodash/isEmpty";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -191,7 +192,7 @@ export class NodesRoute extends React.Component {
[columnId.conditions]: node => node.getNodeConditionText(),
[columnId.taints]: node => node.getTaints().length,
[columnId.roles]: node => node.getRoleLabels(),
- [columnId.age]: node => node.getTimeDiffFromNow(),
+ [columnId.age]: node => -node.getCreationTimestamp(),
[columnId.version]: node => node.getKubeletVersion(),
}}
searchFilters={[
@@ -231,7 +232,7 @@ export class NodesRoute extends React.Component {
>,
node.getRoleLabels(),
node.status.nodeInfo.kubeletVersion,
- node.getAge(),
+ ,
this.renderConditions(node),
];
}}
diff --git a/src/renderer/components/+pod-security-policies/pod-security-policies.tsx b/src/renderer/components/+pod-security-policies/pod-security-policies.tsx
index 1e596aa258..341db9cc35 100644
--- a/src/renderer/components/+pod-security-policies/pod-security-policies.tsx
+++ b/src/renderer/components/+pod-security-policies/pod-security-policies.tsx
@@ -10,6 +10,7 @@ import { observer } from "mobx-react";
import { KubeObjectListLayout } from "../kube-object-list-layout";
import { podSecurityPoliciesStore } from "./pod-security-policies.store";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -28,15 +29,15 @@ export class PodSecurityPolicies extends React.Component {
className="PodSecurityPolicies"
store={podSecurityPoliciesStore}
sortingCallbacks={{
- [columnId.name]: item => item.getName(),
- [columnId.volumes]: item => item.getVolumes(),
- [columnId.privileged]: item => +item.isPrivileged(),
- [columnId.age]: item => item.getTimeDiffFromNow(),
+ [columnId.name]: podSecurityPolicy => podSecurityPolicy.getName(),
+ [columnId.volumes]: podSecurityPolicy => podSecurityPolicy.getVolumes(),
+ [columnId.privileged]: podSecurityPolicy => +podSecurityPolicy.isPrivileged(),
+ [columnId.age]: podSecurityPolicy => -podSecurityPolicy.getCreationTimestamp(),
}}
searchFilters={[
- item => item.getSearchFields(),
- item => item.getVolumes(),
- item => Object.values(item.getRules()),
+ podSecurityPolicy => podSecurityPolicy.getSearchFields(),
+ podSecurityPolicy => podSecurityPolicy.getVolumes(),
+ podSecurityPolicy => Object.values(podSecurityPolicy.getRules()),
]}
renderHeaderTitle="Pod Security Policies"
renderTableHeader={[
@@ -46,15 +47,13 @@ export class PodSecurityPolicies extends React.Component {
{ title: "Volumes", className: "volumes", sortBy: columnId.volumes, id: columnId.volumes },
{ title: "Age", className: "age", sortBy: columnId.age, id: columnId.age },
]}
- renderTableContents={item => {
- return [
- item.getName(),
- ,
- item.isPrivileged() ? "Yes" : "No",
- item.getVolumes().join(", "),
- item.getAge(),
- ];
- }}
+ renderTableContents={podSecurityPolicy => [
+ podSecurityPolicy.getName(),
+ ,
+ podSecurityPolicy.isPrivileged() ? "Yes" : "No",
+ podSecurityPolicy.getVolumes().join(", "),
+ ,
+ ]}
/>
);
}
diff --git a/src/renderer/components/+storage-classes/storage-classes.tsx b/src/renderer/components/+storage-classes/storage-classes.tsx
index 06c646c7c6..5da1239b43 100644
--- a/src/renderer/components/+storage-classes/storage-classes.tsx
+++ b/src/renderer/components/+storage-classes/storage-classes.tsx
@@ -12,6 +12,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout";
import { storageClassStore } from "./storage-class.store";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { StorageClassesRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -34,14 +35,14 @@ export class StorageClasses extends React.Component {
className="StorageClasses"
store={storageClassStore}
sortingCallbacks={{
- [columnId.name]: item => item.getName(),
- [columnId.age]: item => item.getTimeDiffFromNow(),
- [columnId.provisioner]: item => item.provisioner,
- [columnId.reclaimPolicy]: item => item.reclaimPolicy,
+ [columnId.name]: storageClass => storageClass.getName(),
+ [columnId.age]: storageClass => -storageClass.getCreationTimestamp(),
+ [columnId.provisioner]: storageClass => storageClass.provisioner,
+ [columnId.reclaimPolicy]: storageClass => storageClass.reclaimPolicy,
}}
searchFilters={[
- item => item.getSearchFields(),
- item => item.provisioner,
+ storageClass => storageClass.getSearchFields(),
+ storageClass => storageClass.provisioner,
]}
renderHeaderTitle="Storage Classes"
renderTableHeader={[
@@ -58,7 +59,7 @@ export class StorageClasses extends React.Component {
storageClass.provisioner,
storageClass.getReclaimPolicy(),
storageClass.isDefault() ? "Yes" : null,
- storageClass.getAge(),
+ ,
]}
/>
);
diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/src/renderer/components/+storage-volume-claims/volume-claims.tsx
index 30f0077901..4e3da7fa24 100644
--- a/src/renderer/components/+storage-volume-claims/volume-claims.tsx
+++ b/src/renderer/components/+storage-volume-claims/volume-claims.tsx
@@ -17,6 +17,7 @@ import { storageClassApi } from "../../../common/k8s-api/endpoints";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { VolumeClaimsRouteParams } from "../../../common/routes";
import { getDetailsUrl } from "../kube-detail-params";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -48,11 +49,11 @@ export class PersistentVolumeClaims extends React.Component pvc.getStatus(),
[columnId.size]: pvc => unitsToBytes(pvc.getStorage()),
[columnId.storageClass]: pvc => pvc.spec.storageClassName,
- [columnId.age]: pvc => pvc.getTimeDiffFromNow(),
+ [columnId.age]: pvc => -pvc.getCreationTimestamp(),
}}
searchFilters={[
- item => item.getSearchFields(),
- item => item.getPods(podsStore.items).map(pod => pod.getName()),
+ pvc => pvc.getSearchFields(),
+ pvc => pvc.getPods(podsStore.items).map(pod => pod.getName()),
]}
renderHeaderTitle="Persistent Volume Claims"
renderTableHeader={[
@@ -85,7 +86,7 @@ export class PersistentVolumeClaims extends React.Component
)),
- pvc.getAge(),
+ ,
{ title: pvc.getStatus(), className: pvc.getStatus().toLowerCase() },
];
}}
diff --git a/src/renderer/components/+storage-volumes/volumes.tsx b/src/renderer/components/+storage-volumes/volumes.tsx
index 0c458ea567..ab44b4cf3f 100644
--- a/src/renderer/components/+storage-volumes/volumes.tsx
+++ b/src/renderer/components/+storage-volumes/volumes.tsx
@@ -15,6 +15,7 @@ import { volumesStore } from "./volumes.store";
import { pvcApi, storageClassApi } from "../../../common/k8s-api/endpoints";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { VolumesRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -38,15 +39,15 @@ export class PersistentVolumes extends React.Component {
className="PersistentVolumes"
store={volumesStore}
sortingCallbacks={{
- [columnId.name]: item => item.getName(),
- [columnId.storageClass]: item => item.getStorageClass(),
- [columnId.capacity]: item => item.getCapacity(true),
- [columnId.status]: item => item.getStatus(),
- [columnId.age]: item => item.getTimeDiffFromNow(),
+ [columnId.name]: volume => volume.getName(),
+ [columnId.storageClass]: volume => volume.getStorageClass(),
+ [columnId.capacity]: volume => volume.getCapacity(true),
+ [columnId.status]: volume => volume.getStatus(),
+ [columnId.age]: volume => -volume.getCreationTimestamp(),
}}
searchFilters={[
- item => item.getSearchFields(),
- item => item.getClaimRefName(),
+ volume => volume.getSearchFields(),
+ volume => volume.getClaimRefName(),
]}
renderHeaderTitle="Persistent Volumes"
renderTableHeader={[
@@ -76,7 +77,7 @@ export class PersistentVolumes extends React.Component {
{claimRef.name}
),
- volume.getAge(),
+ ,
{ title: volume.getStatus(), className: volume.getStatus().toLowerCase() },
];
}}
diff --git a/src/renderer/components/+user-management/+cluster-role-bindings/view.tsx b/src/renderer/components/+user-management/+cluster-role-bindings/view.tsx
index e24a73243f..48fc0840a0 100644
--- a/src/renderer/components/+user-management/+cluster-role-bindings/view.tsx
+++ b/src/renderer/components/+user-management/+cluster-role-bindings/view.tsx
@@ -15,6 +15,7 @@ import { clusterRoleBindingsStore } from "./store";
import { clusterRolesStore } from "../+cluster-roles/store";
import { serviceAccountsStore } from "../+service-accounts/store";
import type { ClusterRoleBindingsRouteParams } from "../../../../common/routes";
+import { KubeObjectAge } from "../../kube-object/age";
enum columnId {
name = "name",
@@ -40,7 +41,7 @@ export class ClusterRoleBindings extends React.Component binding.getName(),
[columnId.bindings]: binding => binding.getSubjectNames(),
- [columnId.age]: binding => binding.getTimeDiffFromNow(),
+ [columnId.age]: binding => -binding.getCreationTimestamp(),
}}
searchFilters={[
binding => binding.getSearchFields(),
@@ -57,7 +58,7 @@ export class ClusterRoleBindings extends React.Component,
binding.getSubjectNames(),
- binding.getAge(),
+ ,
]}
addRemoveButtons={{
onAdd: () => ClusterRoleBindingDialog.open(),
diff --git a/src/renderer/components/+user-management/+cluster-roles/view.tsx b/src/renderer/components/+user-management/+cluster-roles/view.tsx
index ca2a8755d0..0b979145d6 100644
--- a/src/renderer/components/+user-management/+cluster-roles/view.tsx
+++ b/src/renderer/components/+user-management/+cluster-roles/view.tsx
@@ -13,6 +13,7 @@ import { KubeObjectStatusIcon } from "../../kube-object-status-icon";
import { AddClusterRoleDialog } from "./add-dialog";
import { clusterRolesStore } from "./store";
import type { ClusterRolesRouteParams } from "../../../../common/routes";
+import { KubeObjectAge } from "../../kube-object/age";
enum columnId {
name = "name",
@@ -35,7 +36,7 @@ export class ClusterRoles extends React.Component {
store={clusterRolesStore}
sortingCallbacks={{
[columnId.name]: clusterRole => clusterRole.getName(),
- [columnId.age]: clusterRole => clusterRole.getTimeDiffFromNow(),
+ [columnId.age]: clusterRole => -clusterRole.getCreationTimestamp(),
}}
searchFilters={[
clusterRole => clusterRole.getSearchFields(),
@@ -49,7 +50,7 @@ export class ClusterRoles extends React.Component {
renderTableContents={clusterRole => [
clusterRole.getName(),
,
- clusterRole.getAge(),
+ ,
]}
addRemoveButtons={{
onAdd: () => AddClusterRoleDialog.open(),
diff --git a/src/renderer/components/+user-management/+role-bindings/view.tsx b/src/renderer/components/+user-management/+role-bindings/view.tsx
index 60a0307df4..5ef4099afc 100644
--- a/src/renderer/components/+user-management/+role-bindings/view.tsx
+++ b/src/renderer/components/+user-management/+role-bindings/view.tsx
@@ -15,6 +15,7 @@ import { rolesStore } from "../+roles/store";
import { clusterRolesStore } from "../+cluster-roles/store";
import { serviceAccountsStore } from "../+service-accounts/store";
import type { RoleBindingsRouteParams } from "../../../../common/routes";
+import { KubeObjectAge } from "../../kube-object/age";
enum columnId {
name = "name",
@@ -41,7 +42,7 @@ export class RoleBindings extends React.Component {
[columnId.name]: binding => binding.getName(),
[columnId.namespace]: binding => binding.getNs(),
[columnId.bindings]: binding => binding.getSubjectNames(),
- [columnId.age]: binding => binding.getTimeDiffFromNow(),
+ [columnId.age]: binding => -binding.getCreationTimestamp(),
}}
searchFilters={[
binding => binding.getSearchFields(),
@@ -60,7 +61,7 @@ export class RoleBindings extends React.Component {
,
binding.getNs(),
binding.getSubjectNames(),
- binding.getAge(),
+ ,
]}
addRemoveButtons={{
onAdd: () => RoleBindingDialog.open(),
diff --git a/src/renderer/components/+user-management/+roles/view.tsx b/src/renderer/components/+user-management/+roles/view.tsx
index 4939642e95..63e77c3e04 100644
--- a/src/renderer/components/+user-management/+roles/view.tsx
+++ b/src/renderer/components/+user-management/+roles/view.tsx
@@ -13,6 +13,7 @@ import { KubeObjectStatusIcon } from "../../kube-object-status-icon";
import { AddRoleDialog } from "./add-dialog";
import { rolesStore } from "./store";
import type { RolesRouteParams } from "../../../../common/routes";
+import { KubeObjectAge } from "../../kube-object/age";
enum columnId {
name = "name",
@@ -36,7 +37,7 @@ export class Roles extends React.Component {
sortingCallbacks={{
[columnId.name]: role => role.getName(),
[columnId.namespace]: role => role.getNs(),
- [columnId.age]: role => role.getTimeDiffFromNow(),
+ [columnId.age]: role => -role.getCreationTimestamp(),
}}
searchFilters={[
role => role.getSearchFields(),
@@ -52,7 +53,7 @@ export class Roles extends React.Component {
role.getName(),
,
role.getNs(),
- role.getAge(),
+ ,
]}
addRemoveButtons={{
onAdd: () => AddRoleDialog.open(),
diff --git a/src/renderer/components/+user-management/+service-accounts/view.tsx b/src/renderer/components/+user-management/+service-accounts/view.tsx
index bc768f5874..5c43716ed5 100644
--- a/src/renderer/components/+user-management/+service-accounts/view.tsx
+++ b/src/renderer/components/+user-management/+service-accounts/view.tsx
@@ -13,6 +13,7 @@ import { KubeObjectStatusIcon } from "../../kube-object-status-icon";
import { CreateServiceAccountDialog } from "./create-dialog";
import { serviceAccountsStore } from "./store";
import type { ServiceAccountsRouteParams } from "../../../../common/routes";
+import { KubeObjectAge } from "../../kube-object/age";
enum columnId {
name = "name",
@@ -35,7 +36,7 @@ export class ServiceAccounts extends React.Component {
sortingCallbacks={{
[columnId.name]: account => account.getName(),
[columnId.namespace]: account => account.getNs(),
- [columnId.age]: account => account.getTimeDiffFromNow(),
+ [columnId.age]: account => -account.getCreationTimestamp(),
}}
searchFilters={[
account => account.getSearchFields(),
@@ -51,7 +52,7 @@ export class ServiceAccounts extends React.Component {
account.getName(),
,
account.getNs(),
- account.getAge(),
+ ,
]}
addRemoveButtons={{
onAdd: () => CreateServiceAccountDialog.open(),
diff --git a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx
index 5b0dff6ce5..7a818543af 100644
--- a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx
+++ b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx
@@ -15,6 +15,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { CronJobsRouteParams } from "../../../common/routes";
import moment from "moment";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -36,7 +37,8 @@ export class CronJobs extends React.Component {
cronJob.getName(),
@@ -48,7 +50,7 @@ export class CronJobs extends React.Component {
? moment().diff(cronJob.status.lastScheduleTime)
: 0
),
- [columnId.age]: cronJob => cronJob.getTimeDiffFromNow(),
+ [columnId.age]: cronJob => -cronJob.getCreationTimestamp(),
}}
searchFilters={[
cronJob => cronJob.getSearchFields(),
@@ -73,7 +75,7 @@ export class CronJobs extends React.Component {
cronJob.getSuspendFlag(),
cronJobStore.getActiveJobsNum(cronJob),
cronJob.getLastScheduleTime(),
- cronJob.getAge(),
+ ,
]}
/>
);
diff --git a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx
index 6aad52d788..37293daa05 100644
--- a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx
+++ b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx
@@ -16,6 +16,7 @@ import { KubeObjectListLayout } from "../kube-object-list-layout";
import { Badge } from "../badge";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import type { DaemonSetsRouteParams } from "../../../common/routes";
+import { KubeObjectAge } from "../kube-object/age";
enum columnId {
name = "name",
@@ -39,13 +40,14 @@ export class DaemonSets extends React.Component {
daemonSet.getName(),
[columnId.namespace]: daemonSet => daemonSet.getNs(),
[columnId.pods]: daemonSet => this.getPodsLength(daemonSet),
- [columnId.age]: daemonSet => daemonSet.getTimeDiffFromNow(),
+ [columnId.age]: daemonSet => -daemonSet.getCreationTimestamp(),
}}
searchFilters={[
daemonSet => daemonSet.getSearchFields(),
@@ -68,7 +70,7 @@ export class DaemonSets extends React.Component {
daemonSet.getNodeSelectors().map(selector => (
)),
- daemonSet.getAge(),
+ ,
]}
/>
);
diff --git a/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx b/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx
index 2bb1510f19..110b1da86e 100644
--- a/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx
+++ b/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx
@@ -16,6 +16,7 @@ import { Table, TableCell, TableHead, TableRow } from "../table";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import { replicaSetStore } from "../+workloads-replicasets/replicasets.store";
import { showDetails } from "../kube-detail-params";
+import { KubeObjectAge } from "../kube-object/age";
enum sortBy {
@@ -71,25 +72,23 @@ export class DeploymentReplicaSets extends React.Component
{
- replicaSets.map(replica => {
- return (
- showDetails(replica.selfLink, false))}
- >
- {replica.getName()}
-
- {replica.getNs()}
- {this.getPodsLength(replica)}
- {replica.getAge()}
-
-
-
-
- );
- })
+ replicaSets.map(replica => (
+ showDetails(replica.selfLink, false))}
+ >
+ {replica.getName()}
+
+ {replica.getNs()}
+ {this.getPodsLength(replica)}
+
+
+
+
+
+ ))
}