From 665e3a5443facfeaef8b4770998733f7e76a0269 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 30 Nov 2022 08:46:38 -0500 Subject: [PATCH] Add quick namespace filtering to Endpoints view Signed-off-by: Sebastian Malton --- .../+network-endpoints/endpoints.scss | 4 +++ .../+network-endpoints/endpoints.tsx | 32 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/renderer/components/+network-endpoints/endpoints.scss b/src/renderer/components/+network-endpoints/endpoints.scss index 0f5b29213f..a79d36ff17 100644 --- a/src/renderer/components/+network-endpoints/endpoints.scss +++ b/src/renderer/components/+network-endpoints/endpoints.scss @@ -12,5 +12,9 @@ &.warning { @include table-cell-warning; } + + a.filterNamespace { + border-bottom: unset; + } } } diff --git a/src/renderer/components/+network-endpoints/endpoints.tsx b/src/renderer/components/+network-endpoints/endpoints.tsx index d97c2be98b..4358906a67 100644 --- a/src/renderer/components/+network-endpoints/endpoints.tsx +++ b/src/renderer/components/+network-endpoints/endpoints.tsx @@ -7,11 +7,16 @@ import "./endpoints.scss"; import React from "react"; import { observer } from "mobx-react"; -import { endpointsStore } 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 { prevDefault } from "../../utils"; +import type { EndpointsStore } from "./store"; +import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import endpointsStoreInjectable from "./store.injectable"; +import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; enum columnId { name = "name", @@ -20,8 +25,13 @@ enum columnId { age = "age", } +interface Dependencies { + endpointsStore: EndpointsStore; + filterByNamespace: FilterByNamespace; +} + @observer -export class Endpoints extends React.Component { +class NonInjectedEndpoints extends React.Component { render() { return ( @@ -29,7 +39,7 @@ export class Endpoints extends React.Component { isConfigurable tableId="network_endpoints" className="Endpoints" - store={endpointsStore} + store={this.props.endpointsStore} sortingCallbacks={{ [columnId.name]: endpoint => endpoint.getName(), [columnId.namespace]: endpoint => endpoint.getNs(), @@ -49,7 +59,13 @@ export class Endpoints extends React.Component { renderTableContents={endpoint => [ endpoint.getName(), , - endpoint.getNs(), + this.props.filterByNamespace(endpoint.getNs()))} + > + {endpoint.getNs()} + , endpoint.toString(), , ]} @@ -65,3 +81,11 @@ export class Endpoints extends React.Component { ); } } + +export const Endpoints = withInjectables(NonInjectedEndpoints, { + getProps: (di, props) => ({ + ...props, + endpointsStore: di.inject(endpointsStoreInjectable), + filterByNamespace: di.inject(filterByNamespaceInjectable), + }), +});