/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import "./ingresses.scss"; import React from "react"; import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import { computeRouteDeclarations } from "../../../common/k8s-api/endpoints"; import type { IngressStore } from "./ingress-store"; import { withInjectables } from "@ogre-tools/injectable-react"; import ingressStoreInjectable from "./ingress-store.injectable"; import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", namespace = "namespace", loadBalancers ="load-balancers", rules = "rules", age = "age", } interface Dependencies { ingressStore: IngressStore; } const NonInjectedIngresses = observer((props: Dependencies) => { const { ingressStore, } = props; return ( ingress.getName(), [columnId.namespace]: ingress => ingress.getNs(), [columnId.age]: ingress => -ingress.getCreationTimestamp(), } } searchFilters={ [ ingress => ingress.getSearchFields(), ingress => ingress.getPorts(), ] } renderHeaderTitle="Ingresses" 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: "LoadBalancers", className: "loadbalancers", id: columnId.loadBalancers }, { title: "Rules", className: "rules", id: columnId.rules }, { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, ] } renderTableContents={ ingress => [ ingress.getName(), , , ingress.getLoadBalancers().map(lb =>

{ lb }

), computeRouteDeclarations(ingress).map(decl => ( decl.displayAsLink ? (
e.stopPropagation() } > { decl.url } { ` ⇢ ${decl.service}` }
) : (
{ `${decl.url} ⇢ ${decl.service}` }
) )), , ] } tableProps={ { customRowHeights: (item, lineHeight, paddings) => { const lines = item.getRoutes().length || 1; return lines * lineHeight + paddings; }, } } />
); }); export const Ingresses = withInjectables(NonInjectedIngresses, { getProps: (di, props) => ({ ...props, ingressStore: di.inject(ingressStoreInjectable), }), });