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

@ -79,7 +79,11 @@ exports[`disable kube object detail items when cluster is not relevant given ext
<span <span
class="value" class="value"
> >
some-namespace <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> </span>
</div> </div>
<div <div
@ -695,7 +699,11 @@ exports[`disable kube object detail items when cluster is not relevant given ext
<span <span
class="value" class="value"
> >
some-namespace <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> </span>
</div> </div>
<div> <div>
@ -1306,7 +1314,11 @@ exports[`disable kube object detail items when cluster is not relevant given not
<span <span
class="value" class="value"
> >
some-namespace <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> </span>
</div> </div>
<div> <div>

View File

@ -79,7 +79,11 @@ exports[`reactively hide kube object detail item renders 1`] = `
<span <span
class="value" class="value"
> >
some-namespace <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> </span>
</div> </div>
<div> <div>
@ -690,7 +694,11 @@ exports[`reactively hide kube object detail item when the item is shown renders
<span <span
class="value" class="value"
> >
some-namespace <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> </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,20 +30,24 @@ 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, {
getDetailsUrl, apiManager,
object, getDetailsUrl,
hideFields = [ object,
"uid", hideFields = [
"resourceVersion", "uid",
"selfLink", "resourceVersion",
], "selfLink",
logger, ],
}: Dependencies & KubeObjectMetaProps) => { logger,
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),
}), }),
}); });