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

[UX]: allow to navigate to namespace-details from other resource details view (#7203)

* UX: allow to navigate to namespace (if available) in every kube-resource details view (via: `<KubeObjectMeta/>`)

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Roman 2023-02-21 18:23:05 +02:00 committed by Sebastian Malton
parent 5c6be48c0a
commit 33b0e10cc4
3 changed files with 49 additions and 18 deletions

View File

@ -78,8 +78,12 @@ exports[`disable kube object detail items when cluster is not relevant given ext
</span>
<span
class="value"
>
<a
href="/workloads?kube-details=%2Fapi%2Fv1%2Fnamespaces%2Fsome-namespace&kube-selected=%2Fapis%2Fsome-api-version%2Fnamespaces%2Fsome-namespace%2Fsome-kind%2Fsome-name"
>
some-namespace
</a>
</span>
</div>
<div
@ -694,8 +698,12 @@ exports[`disable kube object detail items when cluster is not relevant given ext
</span>
<span
class="value"
>
<a
href="/workloads?kube-details=%2Fapi%2Fv1%2Fnamespaces%2Fsome-namespace&kube-selected=%2Fapis%2Fsome-api-version%2Fnamespaces%2Fsome-namespace%2Fsome-kind%2Fsome-name"
>
some-namespace
</a>
</span>
</div>
<div>
@ -1305,8 +1313,12 @@ exports[`disable kube object detail items when cluster is not relevant given not
</span>
<span
class="value"
>
<a
href="/workloads?kube-details=%2Fapi%2Fv1%2Fnamespaces%2Fsome-namespace&kube-selected=%2Fapis%2Fsome-api-version%2Fnamespaces%2Fsome-namespace%2Fsome-kind%2Fsome-name"
>
some-namespace
</a>
</span>
</div>
<div>

View File

@ -78,8 +78,12 @@ exports[`reactively hide kube object detail item renders 1`] = `
</span>
<span
class="value"
>
<a
href="/workloads?kube-details=%2Fapi%2Fv1%2Fnamespaces%2Fsome-namespace&kube-selected=%2Fapis%2Fsome-api-version%2Fnamespaces%2Fsome-namespace%2Fsome-kind%2Fsome-name"
>
some-namespace
</a>
</span>
</div>
<div>
@ -689,8 +693,12 @@ exports[`reactively hide kube object detail item when the item is shown renders
</span>
<span
class="value"
>
<a
href="/workloads?kube-details=%2Fapi%2Fv1%2Fnamespaces%2Fsome-namespace&kube-selected=%2Fapis%2Fsome-api-version%2Fnamespaces%2Fsome-namespace%2Fsome-kind%2Fsome-name"
>
some-namespace
</a>
</span>
</div>
<div

View File

@ -19,6 +19,8 @@ import { withInjectables } from "@ogre-tools/injectable-react";
import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable";
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
import loggerInjectable from "../../../common/logger.injectable";
import type { NamespaceApi } from "../../../common/k8s-api/endpoints";
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
export interface KubeObjectMetaProps {
object: KubeObject;
@ -28,10 +30,12 @@ export interface KubeObjectMetaProps {
interface Dependencies {
getDetailsUrl: GetDetailsUrl;
apiManager: ApiManager;
namespaceApi: NamespaceApi;
logger: Logger;
}
const NonInjectedKubeObjectMeta = observer(({
const NonInjectedKubeObjectMeta = observer((
{
apiManager,
getDetailsUrl,
object,
@ -41,7 +45,9 @@ const NonInjectedKubeObjectMeta = observer(({
"selfLink",
],
logger,
}: Dependencies & KubeObjectMetaProps) => {
namespaceApi,
}
: Dependencies & KubeObjectMetaProps) => {
if (!object) {
return null;
}
@ -59,6 +65,10 @@ const NonInjectedKubeObjectMeta = observer(({
getFinalizers, getId, getName, metadata: { creationTimestamp },
} = object;
const ownerRefs = object.getOwnerRefs();
const namespace = getNs();
const namespaceDetailsUrl = namespace ? getDetailsUrl(
namespaceApi.formatUrlForNotListing({ name: namespace }),
) : "";
return (
<>
@ -71,8 +81,8 @@ const NonInjectedKubeObjectMeta = observer(({
{getName()}
<KubeObjectStatusIcon key="icon" object={object} />
</DrawerItem>
<DrawerItem name="Namespace" hidden={isHidden("namespace") || !getNs()}>
{getNs()}
<DrawerItem name="Namespace" hidden={isHidden("namespace") || !namespace}>
<Link to={namespaceDetailsUrl}>{namespace}</Link>
</DrawerItem>
<DrawerItem name="UID" hidden={isHidden("uid")}>
{getId()}
@ -122,5 +132,6 @@ export const KubeObjectMeta = withInjectables<Dependencies, KubeObjectMetaProps>
getDetailsUrl: di.inject(getDetailsUrlInjectable),
apiManager: di.inject(apiManagerInjectable),
logger: di.inject(loggerInjectable),
namespaceApi: di.inject(namespaceApiInjectable),
}),
});