From d3287f5e219a60c176c1a8b99a67349d3882df9a Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 30 Nov 2022 09:25:37 -0500 Subject: [PATCH] Add quick namespace filtering to ServiceAccounts view Signed-off-by: Sebastian Malton --- .../+service-accounts/view.scss | 4 +++ .../+service-accounts/view.tsx | 34 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/renderer/components/+user-management/+service-accounts/view.scss b/src/renderer/components/+user-management/+service-accounts/view.scss index 6147c1e117..e1fa133b5e 100644 --- a/src/renderer/components/+user-management/+service-accounts/view.scss +++ b/src/renderer/components/+user-management/+service-accounts/view.scss @@ -8,5 +8,9 @@ &.warning { @include table-cell-warning; } + + a.filterNamespace { + border-bottom: unset; + } } } diff --git a/src/renderer/components/+user-management/+service-accounts/view.tsx b/src/renderer/components/+user-management/+service-accounts/view.tsx index 610c3cc20d..68161112f8 100644 --- a/src/renderer/components/+user-management/+service-accounts/view.tsx +++ b/src/renderer/components/+user-management/+service-accounts/view.tsx @@ -10,9 +10,14 @@ import React from "react"; import { KubeObjectListLayout } from "../../kube-object-list-layout"; import { KubeObjectStatusIcon } from "../../kube-object-status-icon"; import { CreateServiceAccountDialog } from "./create-dialog"; -import { serviceAccountStore } from "./legacy-store"; import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../../kube-object/age"; +import { prevDefault } from "../../../utils"; +import type { ServiceAccountStore } 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 serviceAccountStoreInjectable from "./store.injectable"; enum columnId { name = "name", @@ -20,9 +25,19 @@ enum columnId { age = "age", } +interface Dependencies { + serviceAccountStore: ServiceAccountStore; + filterByNamespace: FilterByNamespace; +} + @observer -export class ServiceAccounts extends React.Component { +class NonInjectedServiceAccounts extends React.Component { render() { + const { + filterByNamespace, + serviceAccountStore, + } = this.props; + return ( [ account.getName(), , - account.getNs(), + filterByNamespace(account.getNs()))} + > + {account.getNs()} + , , ]} addRemoveButtons={{ @@ -62,3 +83,10 @@ export class ServiceAccounts extends React.Component { } } +export const ServiceAccounts = withInjectables(NonInjectedServiceAccounts, { + getProps: (di, props) => ({ + ...props, + filterByNamespace: di.inject(filterByNamespaceInjectable), + serviceAccountStore: di.inject(serviceAccountStoreInjectable), + }), +});