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/>`)
This commit is contained in:
Roman 2023-02-21 18:23:05 +02:00 committed by GitHub
parent d8acff67d1
commit df1b947870
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 18 deletions

1
package-lock.json generated
View File

@ -32653,6 +32653,7 @@
} }
}, },
"packages/infrastructure/typescript": { "packages/infrastructure/typescript": {
"name": "@k8slens/typescript",
"version": "0.0.1", "version": "0.0.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {

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),
}), }),
}); });