1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add quick namespace filtering to HelmReleases view

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2022-11-30 08:44:01 -05:00
parent 126d5ea9a6
commit 0659cf8e65
2 changed files with 25 additions and 21 deletions

View File

@ -20,5 +20,9 @@
} }
} }
} }
a.filterNamespace {
border-bottom: unset;
}
} }
} }

View File

@ -9,7 +9,6 @@ import "./releases.scss";
import React, { Component } from "react"; import React, { Component } from "react";
import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api";
import { withInjectables } from "@ogre-tools/injectable-react"; import { withInjectables } from "@ogre-tools/injectable-react";
import namespaceStoreInjectable from "../+namespaces/store.injectable";
import type { ItemListStore } from "../item-object-list"; import type { ItemListStore } from "../item-object-list";
import { ItemListLayout } from "../item-object-list"; import { ItemListLayout } from "../item-object-list";
import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter"; import { NamespaceSelectFilter } from "../+namespaces/namespace-select-filter";
@ -24,6 +23,9 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
import helmReleasesRouteParametersInjectable from "./helm-releases-route-parameters.injectable"; import helmReleasesRouteParametersInjectable from "./helm-releases-route-parameters.injectable";
import type { NavigateToHelmReleases } from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable"; import type { NavigateToHelmReleases } from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable";
import navigateToHelmReleasesInjectable from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable"; import navigateToHelmReleasesInjectable from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable";
import { prevDefault } from "../../utils";
import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable";
import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable";
enum columnId { enum columnId {
name = "name", name = "name",
@ -39,9 +41,9 @@ enum columnId {
interface Dependencies { interface Dependencies {
releases: IComputedValue<RemovableHelmRelease[]>; releases: IComputedValue<RemovableHelmRelease[]>;
releasesArePending: IComputedValue<boolean>; releasesArePending: IComputedValue<boolean>;
selectNamespace: (namespace: string) => void;
namespace: IComputedValue<string>; namespace: IComputedValue<string>;
navigateToHelmReleases: NavigateToHelmReleases; navigateToHelmReleases: NavigateToHelmReleases;
filterByNamespace: FilterByNamespace;
} }
class NonInjectedHelmReleases extends Component<Dependencies> { class NonInjectedHelmReleases extends Component<Dependencies> {
@ -50,7 +52,7 @@ class NonInjectedHelmReleases extends Component<Dependencies> {
const namespace = this.props.namespace.get(); const namespace = this.props.namespace.get();
if (namespace) { if (namespace) {
this.props.selectNamespace(namespace); this.props.filterByNamespace(namespace);
} }
} }
@ -186,7 +188,13 @@ class NonInjectedHelmReleases extends Component<Dependencies> {
]} ]}
renderTableContents={release => [ renderTableContents={release => [
release.getName(), release.getName(),
release.getNs(), <a
key="namespace"
className="filterNamespace"
onClick={prevDefault(() => this.props.filterByNamespace(release.getNs()))}
>
{release.getNs()}
</a>,
release.getChart(), release.getChart(),
release.getRevision(), release.getRevision(),
release.getVersion(), release.getVersion(),
@ -213,20 +221,12 @@ class NonInjectedHelmReleases extends Component<Dependencies> {
} }
} }
export const HelmReleases = withInjectables<Dependencies>( export const HelmReleases = withInjectables<Dependencies>(NonInjectedHelmReleases, {
NonInjectedHelmReleases, getProps: (di) => ({
{
getProps: (di) => {
const routeParameters = di.inject(helmReleasesRouteParametersInjectable);
return {
releases: di.inject(removableReleasesInjectable), releases: di.inject(removableReleasesInjectable),
releasesArePending: di.inject(releasesInjectable).pending, releasesArePending: di.inject(releasesInjectable).pending,
selectNamespace: di.inject(namespaceStoreInjectable).selectNamespaces,
navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable), navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable),
namespace: routeParameters.namespace, filterByNamespace: di.inject(filterByNamespaceInjectable),
}; ...di.inject(helmReleasesRouteParametersInjectable),
}, }),
}, });
);