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>
<span <span
class="value" 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 some-namespace
</a>
</span> </span>
</div> </div>
<div <div
@ -694,8 +698,12 @@ exports[`disable kube object detail items when cluster is not relevant given ext
</span> </span>
<span <span
class="value" 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 some-namespace
</a>
</span> </span>
</div> </div>
<div> <div>
@ -1305,8 +1313,12 @@ exports[`disable kube object detail items when cluster is not relevant given not
</span> </span>
<span <span
class="value" 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 some-namespace
</a>
</span> </span>
</div> </div>
<div> <div>

View File

@ -78,8 +78,12 @@ exports[`reactively hide kube object detail item renders 1`] = `
</span> </span>
<span <span
class="value" 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 some-namespace
</a>
</span> </span>
</div> </div>
<div> <div>
@ -689,8 +693,12 @@ exports[`reactively hide kube object detail item when the item is shown renders
</span> </span>
<span <span
class="value" 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 some-namespace
</a>
</span> </span>
</div> </div>
<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 getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable";
import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable";
import loggerInjectable from "../../../common/logger.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 { export interface KubeObjectMetaProps {
object: KubeObject; object: KubeObject;
@ -28,10 +30,12 @@ export interface KubeObjectMetaProps {
interface Dependencies { interface Dependencies {
getDetailsUrl: GetDetailsUrl; getDetailsUrl: GetDetailsUrl;
apiManager: ApiManager; apiManager: ApiManager;
namespaceApi: NamespaceApi;
logger: Logger; logger: Logger;
} }
const NonInjectedKubeObjectMeta = observer(({ const NonInjectedKubeObjectMeta = observer((
{
apiManager, apiManager,
getDetailsUrl, getDetailsUrl,
object, object,
@ -41,7 +45,9 @@ const NonInjectedKubeObjectMeta = observer(({
"selfLink", "selfLink",
], ],
logger, logger,
}: Dependencies & KubeObjectMetaProps) => { namespaceApi,
}
: Dependencies & KubeObjectMetaProps) => {
if (!object) { if (!object) {
return null; return null;
} }
@ -59,6 +65,10 @@ const NonInjectedKubeObjectMeta = observer(({
getFinalizers, getId, getName, metadata: { creationTimestamp }, getFinalizers, getId, getName, metadata: { creationTimestamp },
} = object; } = object;
const ownerRefs = object.getOwnerRefs(); const ownerRefs = object.getOwnerRefs();
const namespace = getNs();
const namespaceDetailsUrl = namespace ? getDetailsUrl(
namespaceApi.formatUrlForNotListing({ name: namespace }),
) : "";
return ( return (
<> <>
@ -71,8 +81,8 @@ const NonInjectedKubeObjectMeta = observer(({
{getName()} {getName()}
<KubeObjectStatusIcon key="icon" object={object} /> <KubeObjectStatusIcon key="icon" object={object} />
</DrawerItem> </DrawerItem>
<DrawerItem name="Namespace" hidden={isHidden("namespace") || !getNs()}> <DrawerItem name="Namespace" hidden={isHidden("namespace") || !namespace}>
{getNs()} <Link to={namespaceDetailsUrl}>{namespace}</Link>
</DrawerItem> </DrawerItem>
<DrawerItem name="UID" hidden={isHidden("uid")}> <DrawerItem name="UID" hidden={isHidden("uid")}>
{getId()} {getId()}
@ -122,5 +132,6 @@ export const KubeObjectMeta = withInjectables<Dependencies, KubeObjectMetaProps>
getDetailsUrl: di.inject(getDetailsUrlInjectable), getDetailsUrl: di.inject(getDetailsUrlInjectable),
apiManager: di.inject(apiManagerInjectable), apiManager: di.inject(apiManagerInjectable),
logger: di.inject(loggerInjectable), logger: di.inject(loggerInjectable),
namespaceApi: di.inject(namespaceApiInjectable),
}), }),
}); });