import "./deployments.scss" import React from "react"; import { observer } from "mobx-react"; import { RouteComponentProps } from "react-router"; import { t, Trans } from "@lingui/macro"; import { Deployment, deploymentApi } from "../../api/endpoints"; import { KubeObjectMenu, KubeObjectMenuProps } from "../kube-object/kube-object-menu"; import { MenuItem } from "../menu"; import { Icon } from "../icon"; import { DeploymentScaleDialog } from "./deployment-scale-dialog"; import { deploymentStore } from "./deployments.store"; import { replicaSetStore } from "../+workloads-replicasets/replicasets.store"; import { podsStore } from "../+workloads-pods/pods.store"; import { nodesStore } from "../+nodes/nodes.store"; import { eventStore } from "../+events/event.store"; import { KubeObjectListLayout } from "../kube-object"; import { IDeploymentsRouteParams } from "../+workloads"; import { _i18n } from "../../i18n"; import { cssNames } from "../../utils"; import kebabCase from "lodash/kebabCase"; import orderBy from "lodash/orderBy"; import { KubeEventIcon } from "../+events/kube-event-icon"; import { apiManager } from "../../api/api-manager"; enum sortBy { name = "name", namespace = "namespace", replicas = "replicas", age = "age", condition = "condition", } interface Props extends RouteComponentProps { } @observer export class Deployments extends React.Component { renderPods(deployment: Deployment) { const { replicas, availableReplicas } = deployment.status return `${availableReplicas || 0}/${replicas || 0}` } renderConditions(deployment: Deployment) { const conditions = orderBy(deployment.getConditions(true), "type", "asc") return conditions.map(({ type, message }) => ( {type} )) } render() { return ( deployment.getName(), [sortBy.namespace]: (deployment: Deployment) => deployment.getNs(), [sortBy.replicas]: (deployment: Deployment) => deployment.getReplicas(), [sortBy.age]: (deployment: Deployment) => deployment.getAge(false), [sortBy.condition]: (deployment: Deployment) => deployment.getConditionsText(), }} searchFilters={[ (deployment: Deployment) => deployment.getSearchFields(), (deployment: Deployment) => deployment.getConditionsText(), ]} renderHeaderTitle={Deployments} renderTableHeader={[ { title: Name, className: "name", sortBy: sortBy.name }, { title: Namespace, className: "namespace", sortBy: sortBy.namespace }, { title: Pods, className: "pods" }, { title: Replicas, className: "replicas", sortBy: sortBy.replicas }, { className: "warning" }, { title: Age, className: "age", sortBy: sortBy.age }, { title: Conditions, className: "conditions", sortBy: sortBy.condition }, ]} renderTableContents={(deployment: Deployment) => [ deployment.getName(), deployment.getNs(), this.renderPods(deployment), deployment.getReplicas(), , deployment.getAge(), this.renderConditions(deployment), ]} renderItemMenu={(item: Deployment) => { return }} /> ) } } export function DeploymentMenu(props: KubeObjectMenuProps) { const { object, toolbar } = props; return ( DeploymentScaleDialog.open(object)}> Scale ) } apiManager.registerViews(deploymentApi, { Menu: DeploymentMenu, });