import "./ingress-details.scss"; import * as React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import { reaction } from "mobx"; import { Trans } from "@lingui/macro"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Ingress, ingressApi } from "../../api/endpoints"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { KubeEventDetails } from "../+events/kube-event-details"; import { ingressStore } from "./ingress.store"; import { ResourceMetrics } from "../resource-metrics"; import { KubeObjectDetailsProps } from "../kube-object"; import { IngressCharts } from "./ingress-charts"; import { apiManager } from "../../api/api-manager"; import { KubeObjectMeta } from "../kube-object/kube-object-meta"; interface Props extends KubeObjectDetailsProps { } @observer export class IngressDetails extends React.Component { @disposeOnUnmount clean = reaction(() => this.props.object, () => { ingressStore.reset(); }); componentWillUnmount() { ingressStore.reset(); } renderPaths(ingress: Ingress) { const { spec: { rules } } = ingress if (!rules || !rules.length) return null return rules.map((rule, index) => { return (
{rule.host && (
Host: {rule.host}
)} {rule.http && ( Path Backends { rule.http.paths.map((path, index) => { const backend = `${path.backend.serviceName}:${path.backend.servicePort}` return ( {path.path || ""}

{backend}

) }) }
)}
) }) } render() { const { object: ingress } = this.props; if (!ingress) { return null; } const { spec } = ingress; const { metrics } = ingressStore; const metricTabs = [ Network, Duration, ]; return (
ingressStore.loadMetrics(ingress)} tabs={metricTabs} object={ingress} params={{ metrics }} > Ports}> {ingress.getPorts()} {spec.tls && TLS}> {spec.tls.map((tls, index) =>

{tls.secretName}

)}
} {spec.backend && spec.backend.serviceName && spec.backend.servicePort && Service}> {spec.backend.serviceName}:{spec.backend.servicePort} } Rules}/> {this.renderPaths(ingress)}
) } } apiManager.registerViews(ingressApi, { Details: IngressDetails, })