From ee886820d993481f57f50fa19a6bf0fa2167fd03 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 30 Nov 2022 09:36:32 -0500 Subject: [PATCH] Add quick namespace filtering to Jobs view Signed-off-by: Sebastian Malton --- .../components/+workloads-jobs/jobs.scss | 4 ++ .../components/+workloads-jobs/jobs.tsx | 41 +++++++++++++++++-- .../+workloads-jobs/legacy-store.ts | 12 ------ 3 files changed, 41 insertions(+), 16 deletions(-) delete mode 100644 src/renderer/components/+workloads-jobs/legacy-store.ts diff --git a/src/renderer/components/+workloads-jobs/jobs.scss b/src/renderer/components/+workloads-jobs/jobs.scss index c19dd6c467..a24cfc7b06 100644 --- a/src/renderer/components/+workloads-jobs/jobs.scss +++ b/src/renderer/components/+workloads-jobs/jobs.scss @@ -18,5 +18,9 @@ &.conditions { @include job-condition-colors; } + + a.filterNamespace { + border-bottom: unset; + } } } diff --git a/src/renderer/components/+workloads-jobs/jobs.tsx b/src/renderer/components/+workloads-jobs/jobs.tsx index 2d6f559c73..f1455bd2f8 100644 --- a/src/renderer/components/+workloads-jobs/jobs.tsx +++ b/src/renderer/components/+workloads-jobs/jobs.tsx @@ -7,13 +7,19 @@ import "./jobs.scss"; import React from "react"; import { observer } from "mobx-react"; -import { jobStore } from "./legacy-store"; -import { eventStore } from "../+events/legacy-store"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import kebabCase from "lodash/kebabCase"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; +import type { JobStore } from "./store"; +import type { EventStore } from "../+events/store"; +import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { prevDefault } from "../../utils"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import eventStoreInjectable from "../+events/store.injectable"; +import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import jobStoreInjectable from "./store.injectable"; enum columnId { name = "name", @@ -23,9 +29,21 @@ enum columnId { age = "age", } +interface Dependencies { + jobStore: JobStore; + eventStore: EventStore; + filterByNamespace: FilterByNamespace; +} + @observer -export class Jobs extends React.Component { +class NonInjectedJobs extends React.Component { render() { + const { + eventStore, + filterByNamespace, + jobStore, + } = this.props; + return ( filterByNamespace(job.getNs()))} + > + {job.getNs()} + , `${job.getCompletions()} / ${job.getDesiredCompletions()}`, , , @@ -72,3 +96,12 @@ export class Jobs extends React.Component { ); } } + +export const Jobs = withInjectables(NonInjectedJobs, { + getProps: (di, props) => ({ + ...props, + eventStore: di.inject(eventStoreInjectable), + filterByNamespace: di.inject(filterByNamespaceInjectable), + jobStore: di.inject(jobStoreInjectable), + }), +}); diff --git a/src/renderer/components/+workloads-jobs/legacy-store.ts b/src/renderer/components/+workloads-jobs/legacy-store.ts deleted file mode 100644 index b4b7e47f85..0000000000 --- a/src/renderer/components/+workloads-jobs/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 jobStoreInjectable from "./store.injectable"; - -/** - * @deprecated use `di.inject(jobStoreInjectable)` instead - */ -export const jobStore = asLegacyGlobalForExtensionApi(jobStoreInjectable);