Expose reactive ways to hide items in cluster frame using Extension API - PART 7 (#5824)

* Kludge "isEnabledForCluster" work again for cluster pages

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Kludge "isEnabledForCluster" work again for kube object details

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose reactive way to hide kube object detail items in Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose reactive way to hide kube object menu items in Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose reactive way to hide kube object status items in Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose reactive way to hide workload overview detail items in Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose reactive way to disable pages in Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Expose a way to access active cluster from Extension API

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>

* Deprecate "isEnabledForCluster" in favor of individual enabled or visible properties for each registration

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen authored and GitHub committed 2022-07-13 13:47:03 -04:00
1 parent ca40c51117
commit d66e6c23c5
19 files changed
+679 -33

No files matched your search

@@ -10,9 +10,7 @@ import extensionShouldBeEnabledForClusterFrameInjectable from "../../../extensio
import { kubeObjectDetailItemInjectionToken } from "./kube-object-detail-item-injection-token";
import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token";
import currentKubeObjectInDetailsInjectable from "../current-kube-object-in-details.injectable";
import {
kubeObjectMatchesToKindAndApiVersion,
} from "./kube-object-matches-to-kind-and-api-version";
import { kubeObjectMatchesToKindAndApiVersion } from "./kube-object-matches-to-kind-and-api-version";
const kubeObjectDetailItemRegistratorInjectable = getInjectable({
id: "kube-object-detail-item-registrator",
@@ -45,20 +43,24 @@ const kubeObjectDetailItemRegistratorInjectable = getInjectable({
id,
instantiate: (di) => {
const kubeObject = di.inject(
currentKubeObjectInDetailsInjectable,
);
const kubeObject = di.inject(currentKubeObjectInDetailsInjectable);
return {
kind: registration.kind,
apiVersions: registration.apiVersions,
Component: registration.components.Details,
enabled: computed(
() =>
extensionShouldBeEnabledForClusterFrame.value.get() &&
isRelevantKubeObject(kubeObject.get()),
),
enabled: computed(() => {
if (!extensionShouldBeEnabledForClusterFrame.value.get()) {
return false;
}
if (!isRelevantKubeObject(kubeObject.get())) {
return false;
}
return registration.visible ? registration.visible.get() : true;
}),
orderNumber: 300 - (registration.priority || 50),
};
@@ -5,6 +5,7 @@
import type { KubeObject } from "../../../common/k8s-api/kube-object";
import type { KubeObjectDetailsProps } from "./kube-object-details";
import type React from "react";
import type { IComputedValue } from "mobx";
export interface KubeObjectDetailComponents<T extends KubeObject = KubeObject> {
Details: React.ComponentType<KubeObjectDetailsProps<T>>;
@@ -15,4 +16,5 @@ export interface KubeObjectDetailRegistration<T extends KubeObject = KubeObject>
apiVersions: string[];
components: KubeObjectDetailComponents<T>;
priority?: number;
visible?: IComputedValue<boolean>;
}