From f7a40c8da476b52fe31b3284930503e82a87b3a3 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 30 Nov 2022 09:15:12 -0500 Subject: [PATCH] Add quick namespace filtering to PersistentVolumeClaims view Signed-off-by: Sebastian Malton --- .../+storage-volume-claims/legacy-store.ts | 12 ---- .../+storage-volume-claims/volume-claims.scss | 4 ++ .../+storage-volume-claims/volume-claims.tsx | 56 ++++++++++++++++--- 3 files changed, 52 insertions(+), 20 deletions(-) delete mode 100644 src/renderer/components/+storage-volume-claims/legacy-store.ts diff --git a/src/renderer/components/+storage-volume-claims/legacy-store.ts b/src/renderer/components/+storage-volume-claims/legacy-store.ts deleted file mode 100644 index ec63bef14d..0000000000 --- a/src/renderer/components/+storage-volume-claims/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 persistentVolumeClaimStoreInjectable from "./store.injectable"; - -/** - * @deprecated use `di.inject(persistentVolumeClaimStoreInjectable)` instead - */ -export const persistentVolumeClaimStore = asLegacyGlobalForExtensionApi(persistentVolumeClaimStoreInjectable); diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.scss b/src/renderer/components/+storage-volume-claims/volume-claims.scss index d42d57ce8b..ac476c595c 100644 --- a/src/renderer/components/+storage-volume-claims/volume-claims.scss +++ b/src/renderer/components/+storage-volume-claims/volume-claims.scss @@ -38,5 +38,9 @@ &.age { flex: 0.4; } + + a.filterNamespace { + border-bottom: unset; + } } } diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/src/renderer/components/+storage-volume-claims/volume-claims.tsx index b1c615314b..31ebee4bc4 100644 --- a/src/renderer/components/+storage-volume-claims/volume-claims.tsx +++ b/src/renderer/components/+storage-volume-claims/volume-claims.tsx @@ -8,16 +8,23 @@ import "./volume-claims.scss"; import React from "react"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; -import { persistentVolumeClaimStore } from "./legacy-store"; -import { podStore } from "../+workloads-pods/legacy-store"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { unitsToBytes } from "../../../common/utils/convertMemory"; -import { stopPropagation } from "../../utils"; -import { storageClassApi } from "../../../common/k8s-api/endpoints"; +import { prevDefault, stopPropagation } from "../../utils"; +import type { StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; -import { getDetailsUrl } from "../kube-detail-params"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; +import type { PersistentVolumeClaimStore } from "./store"; +import type { PodStore } from "../+workloads-pods/store"; +import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; +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 getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; +import persistentVolumeClaimStoreInjectable from "./store.injectable"; +import podStoreInjectable from "../+workloads-pods/store.injectable"; +import storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable"; enum columnId { name = "name", @@ -29,9 +36,25 @@ enum columnId { age = "age", } +interface Dependencies { + persistentVolumeClaimStore: PersistentVolumeClaimStore; + storageClassApi: StorageClassApi; + podStore: PodStore; + getDetailsUrl: GetDetailsUrl; + filterByNamespace: FilterByNamespace; +} + @observer -export class PersistentVolumeClaims extends React.Component { +class NonInjectedPersistentVolumeClaims extends React.Component { render() { + const { + persistentVolumeClaimStore, + filterByNamespace, + getDetailsUrl, + podStore, + storageClassApi, + } = this.props; + return ( { const pods = pvc.getPods(podStore.items); const { storageClassName } = pvc.spec; - const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({ + const storageClassDetailsUrl = getDetailsUrl(storageClassApi.formatUrlForNotListing({ name: storageClassName, })); return [ pvc.getName(), , - pvc.getNs(), + filterByNamespace(pvc.getNs()))} + > + {pvc.getNs()} + , (NonInjectedPersistentVolumeClaims, { + getProps: (di, props) => ({ + ...props, + filterByNamespace: di.inject(filterByNamespaceInjectable), + getDetailsUrl: di.inject(getDetailsUrlInjectable), + persistentVolumeClaimStore: di.inject(persistentVolumeClaimStoreInjectable), + podStore: di.inject(podStoreInjectable), + storageClassApi: di.inject(storageClassApiInjectable), + }), +});