diff --git a/src/renderer/components/+network-ingresses/ingresses.scss b/src/renderer/components/+network-ingresses/ingresses.scss index 960ba3702f..fdf0bda6b8 100644 --- a/src/renderer/components/+network-ingresses/ingresses.scss +++ b/src/renderer/components/+network-ingresses/ingresses.scss @@ -31,5 +31,9 @@ &.warning { @include table-cell-warning; } + + a.filterNamespace { + border-bottom: unset; + } } } diff --git a/src/renderer/components/+network-ingresses/ingresses.tsx b/src/renderer/components/+network-ingresses/ingresses.tsx index 1ca8589f80..a8403e142b 100644 --- a/src/renderer/components/+network-ingresses/ingresses.tsx +++ b/src/renderer/components/+network-ingresses/ingresses.tsx @@ -7,12 +7,17 @@ import "./ingresses.scss"; import React from "react"; import { observer } from "mobx-react"; -import { ingressStore } from "./legacy-store"; 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 { prevDefault } from "../../utils"; +import type { IngressStore } from "./store"; +import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import ingressStoreInjectable from "./store.injectable"; enum columnId { name = "name", @@ -22,8 +27,13 @@ enum columnId { age = "age", } +interface Dependencies { + ingressStore: IngressStore; + filterByNamespace: FilterByNamespace; +} + @observer -export class Ingresses extends React.Component { +class NonInjectedIngresses extends React.Component { render() { return ( @@ -31,7 +41,7 @@ export class Ingresses extends React.Component { isConfigurable tableId="network_ingresses" className="Ingresses" - store={ingressStore} + store={this.props.ingressStore} sortingCallbacks={{ [columnId.name]: ingress => ingress.getName(), [columnId.namespace]: ingress => ingress.getNs(), @@ -53,7 +63,13 @@ export class Ingresses extends React.Component { renderTableContents={ingress => [ ingress.getName(), , - ingress.getNs(), + this.props.filterByNamespace(ingress.getNs()))} + > + {ingress.getNs()} + , ingress.getLoadBalancers().map(lb =>

{lb}

), computeRouteDeclarations(ingress).map(decl => ( decl.displayAsLink @@ -90,3 +106,11 @@ export class Ingresses extends React.Component { ); } } + +export const Ingresses = withInjectables(NonInjectedIngresses, { + getProps: (di, props) => ({ + ...props, + filterByNamespace: di.inject(filterByNamespaceInjectable), + ingressStore: di.inject(ingressStoreInjectable), + }), +}); diff --git a/src/renderer/components/+network-ingresses/legacy-store.ts b/src/renderer/components/+network-ingresses/legacy-store.ts deleted file mode 100644 index 0731109f5d..0000000000 --- a/src/renderer/components/+network-ingresses/legacy-store.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { asLegacyGlobalForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; -import ingressStoreInjectable from "./store.injectable"; - -/** - * @deprecated use `di.inject(ingressStoreInjectable)` instead - */ -export const ingressStore = asLegacyGlobalForExtensionApi(ingressStoreInjectable);