1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

items list + details list views (added contents from replication controllers), lint fixes

Signed-off-by: Roman <ixrock@gmail.com>
This commit is contained in:
Roman 2023-02-14 14:48:30 +02:00
parent 30bd97b883
commit 1d08dd8300
8 changed files with 77 additions and 41 deletions

View File

@ -8,7 +8,7 @@ import { KubeApi } from "../kube-api";
import type {
BaseKubeObjectCondition,
KubeObjectStatus,
NamespaceScopedMetadata
NamespaceScopedMetadata,
} from "../kube-object";
import { KubeObject } from "../kube-object";
import type { PodTemplateSpec } from "./types";
@ -63,7 +63,7 @@ export interface ReplicationControllerSpec {
* Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef.
* More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
*/
template?: PodTemplateSpec;
template: PodTemplateSpec;
}
export interface ReplicationControllerStatus extends KubeObjectStatus {
@ -103,8 +103,8 @@ export class ReplicationController extends KubeObject<
return this.spec?.minReadySeconds ?? 0;
}
getDesiredReplicas(): number | undefined {
return this.spec?.replicas;
getGeneration() {
return this.status?.observedGeneration;
}
getSelectorLabels(): string[] {
@ -115,6 +115,10 @@ export class ReplicationController extends KubeObject<
return this.status?.replicas;
}
getDesiredReplicas(): number | undefined {
return this.spec?.replicas;
}
getAvailableReplicas(): number | undefined {
return this.status?.availableReplicas;
}

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import { ReplicationControllers } from "./replicationcontrollers";
import {
routeSpecificComponentInjectionToken
routeSpecificComponentInjectionToken,
} from "../../routes/route-specific-component-injection-token";
import replicationControllersRouteInjectable
from "../../../common/front-end-routing/routes/cluster/workloads/replicationcontrollers/replicationcontrollers-route.injectable";

View File

@ -7,11 +7,11 @@ import styles from "./replicationcontroller-details.module.scss";
import React from "react";
import { observer } from "mobx-react";
import { withInjectables } from "@ogre-tools/injectable-react";
import { DrawerItem } from "../drawer";
import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge";
import type { KubeObjectDetailsProps } from "../kube-object-details";
import type { ReplicationControllerStore } from "./replicationctrl-store";
import replicationControllerStoreInjectable from "./replicationctrl-store.injectable";
import type { ReplicationControllerStore } from "./replicationcontroller-store";
import replicationControllerStoreInjectable from "./replicationcontroller-store.injectable";
import type { ReplicationController } from "../../../common/k8s-api/endpoints";
export interface ReplicationControllerDetailsProps extends KubeObjectDetailsProps<ReplicationController> {
@ -24,13 +24,39 @@ interface Dependencies {
@observer
class NonInjectedReplicationControllerDetails extends React.Component<ReplicationControllerDetailsProps & Dependencies> {
render() {
const { object: ctrl, store } = this.props;
const { object: resource } = this.props;
return (
<div className={styles.ReplicationControllerDetails}>
<DrawerItem name="Some info" labelsOnly>
<p>Controller: {ctrl.getName()}</p>
<p>Items in store: <Badge label={store.items.length} /></p>
<DrawerTitle>
Spec
</DrawerTitle>
<DrawerItem name="Desired Replicas">
{resource.getDesiredReplicas()}
</DrawerItem>
<DrawerItem name="Selectors" labelsOnly>
{
resource.getSelectorLabels().map(label => (<Badge key={label} label={label} />))
}
</DrawerItem>
<DrawerTitle>
Status
</DrawerTitle>
<DrawerItem name="Replicas">
{resource.getReplicas()}
</DrawerItem>
<DrawerItem name="Available Replicas">
{resource.getAvailableReplicas()}
</DrawerItem>
<DrawerItem name="Labeled Replicas">
{resource.getLabeledReplicas()}
</DrawerItem>
<DrawerItem name="Controller Generation">
{resource.getGeneration()}
</DrawerItem>
<DrawerItem name="Minimum Pod Readiness">
{`${resource.getMinReadySeconds()} seconds`}
</DrawerItem>
</div>
);

View File

@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token";
import { ReplicationControllerStore } from "./replicationctrl-store";
import { ReplicationControllerStore } from "./replicationcontroller-store";
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
import loggerInjectable from "../../../common/logger.injectable";
import replicationControllerApiInjectable

View File

@ -5,11 +5,11 @@
import type {
ReplicationController,
ReplicationControllerApi
ReplicationControllerApi,
} from "../../../common/k8s-api/endpoints";
import type {
KubeObjectStoreDependencies,
KubeObjectStoreOptions
KubeObjectStoreOptions,
} from "../../../common/k8s-api/kube-object.store";
import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store";

View File

@ -6,65 +6,72 @@
import styles from "./replicationcontrollers.module.scss";
import React from "react";
import { observer } from "mobx-react";
import { KubeObjectStatusIcon } from "../kube-object-status-icon";
import { KubeObjectListLayout } from "../kube-object-list-layout";
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
import type { ReplicationControllerStore } from "./replicationctrl-store";
import type { EventStore } from "../+events/store";
import type { ReplicationControllerStore } from "./replicationcontroller-store";
import { withInjectables } from "@ogre-tools/injectable-react";
import eventStoreInjectable from "../+events/store.injectable";
import replicationControllerStoreInjectable from "./replicationctrl-store.injectable";
import replicationControllerStoreInjectable from "./replicationcontroller-store.injectable";
import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge";
import { Badge } from "../badge";
enum columnId {
name = "name",
namespace = "namespace",
replicas = "replicas",
replicasDesired = "replicasDesired",
selector = "selector",
}
interface Dependencies {
store: ReplicationControllerStore;
eventStore: EventStore;
}
const NonInjectedReplicationControllers = observer((props: Dependencies) => {
const {
eventStore,
store,
} = props;
return (
<SiblingsInTabLayout>
<KubeObjectListLayout
isConfigurable
tableId="workload_replicationcontrollers"
className={styles.ReplicationControllers}
store={store}
dependentStores={[eventStore]} // status icon component uses event store
store={props.store}
sortingCallbacks={{
[columnId.name]: replicaSet => replicaSet.getName(),
[columnId.namespace]: replicaSet => replicaSet.getNs(),
[columnId.name]: item => item.getName(),
[columnId.namespace]: item => item.getNs(),
[columnId.selector]: item => item.getSelectorLabels(),
[columnId.replicas]: item => item.getReplicas(),
[columnId.replicasDesired]: item => item.getDesiredReplicas(),
}}
searchFilters={[
replicaSet => replicaSet.getSearchFields(),
item => item.getSearchFields(),
item => item.getSelectorLabels(),
]}
renderHeaderTitle="Replication Controllers"
renderTableHeader={[
{ title: "Name", className: "name", sortBy: columnId.name, id: columnId.name },
{ className: "warning", showWithColumn: columnId.name },
{
title: "Namespace",
className: "namespace",
sortBy: columnId.namespace,
id: columnId.namespace,
},
{ title: "Replicas", sortBy: columnId.replicas, id: columnId.replicas },
{
title: "Desired Replicas",
sortBy: columnId.replicasDesired,
id: columnId.replicasDesired,
},
{
title: "Selector",
sortBy: columnId.selector,
id: columnId.selector,
},
]}
renderTableContents={replicaSet => [
replicaSet.getName(),
<KubeObjectStatusIcon key="icon" object={replicaSet} />,
<NamespaceSelectBadge
key="namespace"
namespace={replicaSet.getNs()}
/>,
renderTableContents={item => [
item.getName(),
<NamespaceSelectBadge key="namespace" namespace={item.getNs()} />,
item.getReplicas(),
item.getDesiredReplicas(),
item.getSelectorLabels().map(label => (<Badge key={label} label={label} />)),
]}
/>
</SiblingsInTabLayout>
@ -74,7 +81,6 @@ const NonInjectedReplicationControllers = observer((props: Dependencies) => {
export const ReplicationControllers = withInjectables<Dependencies>(NonInjectedReplicationControllers, {
getProps: (di, props) => ({
...props,
eventStore: di.inject(eventStoreInjectable),
store: di.inject(replicationControllerStoreInjectable),
}),
});

View File

@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
import { kubeObjectDetailItemInjectionToken } from "../kube-object-detail-item-injection-token";
import { computed } from "mobx";
import {
kubeObjectMatchesToKindAndApiVersion
kubeObjectMatchesToKindAndApiVersion,
} from "../kube-object-matches-to-kind-and-api-version";
import currentKubeObjectInDetailsInjectable from "../../current-kube-object-in-details.injectable";
import { ReplicationControllerDetails } from "../../../+workloads-replicationcontrollers";