mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Introduce kludge to make "isEnabledForCluster" work again for cluster pages PART 1 (#5800)
* Kludge "isEnabledForCluster" work again for cluster pages Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce kludge to make "isEnabledForCluster" work again for cluster page menus PART 2 (#5801) * Kludge "isEnabledForCluster" work again for cluster page menus (sidebar items) Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce kludge to make "isEnabledForCluster" work again for kube object status texts PART 3 (#5802) * Kludge "isEnabledForCluster" work again for kube object status texts Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge "isEnabledForCluster" work again for kube object menu items (#5803) Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Introduce kludge to make "isEnabledForCluster" work again for workload overview details PART 5 (#5804) * Kludge "isEnabledForCluster" work again for cluster page menus (sidebar items) Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge "isEnabledForCluster" work again for kube object status texts Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge "isEnabledForCluster" work again for kube object menu items Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge "isEnabledForCluster" work again for workload overview details Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Kludge "isEnabledForCluster" work again for kube object details (#5805) Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
1 parent
27cb7d1ca9
commit
ca40c51117
96 files changed
+11371
-904
No files matched your search
@@ -1,68 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { computed } from "mobx";
|
||||
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable";
|
||||
import { OverviewStatuses } from "./overview-statuses";
|
||||
import { WorkloadEvents } from "../../initializers/workload-events";
|
||||
import { orderBy } from "lodash/fp";
|
||||
import type { WorkloadsOverviewDetailRegistration } from "./workloads-overview-detail-registration";
|
||||
|
||||
const detailComponentsInjectable = getInjectable({
|
||||
id: "workload-detail-components",
|
||||
|
||||
instantiate: (di) => {
|
||||
const extensions = di.inject(rendererExtensionsInjectable);
|
||||
|
||||
return computed(() => {
|
||||
const extensionRegistrations = extensions
|
||||
.get()
|
||||
.flatMap((extension) => extension.kubeWorkloadsOverviewItems);
|
||||
|
||||
const allRegistrations = [
|
||||
...coreRegistrations,
|
||||
...extensionRegistrations,
|
||||
];
|
||||
|
||||
return getRegistrationsInPriorityOrder(allRegistrations).map(
|
||||
(item) => item.components.Details,
|
||||
);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const coreRegistrations = [
|
||||
{
|
||||
components: {
|
||||
Details: OverviewStatuses,
|
||||
},
|
||||
},
|
||||
{
|
||||
priority: 5,
|
||||
components: {
|
||||
Details: WorkloadEvents,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const toRegistrationWithDefaultPriority = ({
|
||||
priority = 50,
|
||||
...rest
|
||||
}: WorkloadsOverviewDetailRegistration) => ({
|
||||
priority,
|
||||
...rest,
|
||||
});
|
||||
|
||||
const getRegistrationsInPriorityOrder = (
|
||||
allRegistrations: WorkloadsOverviewDetailRegistration[],
|
||||
) =>
|
||||
orderBy(
|
||||
"priority",
|
||||
"desc",
|
||||
|
||||
allRegistrations.map(toRegistrationWithDefaultPriority),
|
||||
);
|
||||
|
||||
export default detailComponentsInjectable;
|
||||
@@ -20,7 +20,7 @@ import { withInjectables } from "@ogre-tools/injectable-react";
|
||||
import clusterFrameContextInjectable from "../../cluster-frame-context/cluster-frame-context.injectable";
|
||||
import type { ClusterFrameContext } from "../../cluster-frame-context/cluster-frame-context";
|
||||
import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api";
|
||||
import detailComponentsInjectable from "./detail-components.injectable";
|
||||
import workloadOverviewDetailsInjectable from "./workload-overview-details/workload-overview-details.injectable";
|
||||
import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout";
|
||||
import type { PodStore } from "../+workloads-pods/store";
|
||||
import type { DaemonSetStore } from "../+workloads-daemonsets/store";
|
||||
@@ -37,7 +37,7 @@ import type { EventStore } from "../+events/store";
|
||||
import eventStoreInjectable from "../+events/store.injectable";
|
||||
|
||||
interface Dependencies {
|
||||
detailComponents: IComputedValue<React.ComponentType<{}>[]>;
|
||||
detailComponents: IComputedValue<React.ElementType<{}>[]>;
|
||||
clusterFrameContext: ClusterFrameContext;
|
||||
subscribeStores: SubscribeStores;
|
||||
podStore: PodStore;
|
||||
@@ -122,7 +122,7 @@ class NonInjectedWorkloadsOverview extends React.Component<Dependencies> {
|
||||
|
||||
export const WorkloadsOverview = withInjectables<Dependencies>(NonInjectedWorkloadsOverview, {
|
||||
getProps: (di) => ({
|
||||
detailComponents: di.inject(detailComponentsInjectable),
|
||||
detailComponents: di.inject(workloadOverviewDetailsInjectable),
|
||||
clusterFrameContext: di.inject(clusterFrameContextInjectable),
|
||||
subscribeStores: di.inject(subscribeStoresInjectable),
|
||||
daemonSetStore: di.inject(daemonSetStoreInjectable),
|
||||
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { workloadOverviewDetailInjectionToken } from "../workload-overview-detail-injection-token";
|
||||
import { OverviewStatuses } from "../../overview-statuses";
|
||||
import { computed } from "mobx";
|
||||
|
||||
const overviewStatusesInjectable = getInjectable({
|
||||
id: "overview-statuses",
|
||||
|
||||
instantiate: () => ({
|
||||
Component: OverviewStatuses,
|
||||
enabled: computed(() => true),
|
||||
orderNumber: 50,
|
||||
}),
|
||||
|
||||
injectionToken: workloadOverviewDetailInjectionToken,
|
||||
});
|
||||
|
||||
export default overviewStatusesInjectable;
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { workloadOverviewDetailInjectionToken } from "../workload-overview-detail-injection-token";
|
||||
import { computed } from "mobx";
|
||||
import { WorkloadEvents } from "../../../../initializers/workload-events";
|
||||
|
||||
const workloadEventsInjectable = getInjectable({
|
||||
id: "workload-events",
|
||||
|
||||
instantiate: () => ({
|
||||
Component: WorkloadEvents,
|
||||
enabled: computed(() => true),
|
||||
orderNumber: 300,
|
||||
}),
|
||||
|
||||
injectionToken: workloadOverviewDetailInjectionToken,
|
||||
});
|
||||
|
||||
export default workloadEventsInjectable;
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
||||
import type { IComputedValue } from "mobx";
|
||||
import type React from "react";
|
||||
|
||||
interface WorkloadOverviewDetail {
|
||||
orderNumber: number;
|
||||
Component: React.ElementType<{}>;
|
||||
enabled: IComputedValue<boolean>;
|
||||
}
|
||||
|
||||
export const workloadOverviewDetailInjectionToken =
|
||||
getInjectionToken<WorkloadOverviewDetail>({
|
||||
id: "workload-overview-detail-injection-token",
|
||||
});
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { computed } from "mobx";
|
||||
import getRandomIdInjectable from "../../../../common/utils/get-random-id.injectable";
|
||||
import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
|
||||
import extensionShouldBeEnabledForClusterFrameInjectable from "../../../extension-loader/extension-should-be-enabled-for-cluster-frame.injectable";
|
||||
import { workloadOverviewDetailInjectionToken } from "./workload-overview-detail-injection-token";
|
||||
import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token";
|
||||
|
||||
const workloadOverviewDetailRegistratorInjectable = getInjectable({
|
||||
id: "workload-overview-detail-registrator",
|
||||
|
||||
instantiate: (di) => {
|
||||
const getRandomId = di.inject(getRandomIdInjectable);
|
||||
|
||||
const getExtensionShouldBeEnabledForClusterFrame = (
|
||||
extension: LensRendererExtension,
|
||||
) =>
|
||||
di.inject(extensionShouldBeEnabledForClusterFrameInjectable, extension);
|
||||
|
||||
return (ext) => {
|
||||
const extension = ext as LensRendererExtension;
|
||||
|
||||
const extensionShouldBeEnabledForClusterFrame =
|
||||
getExtensionShouldBeEnabledForClusterFrame(extension);
|
||||
|
||||
return extension.kubeWorkloadsOverviewItems.map((registration) => {
|
||||
const id = `workload-overview-detail-from-${
|
||||
extension.sanitizedExtensionId
|
||||
}-${getRandomId()}`;
|
||||
|
||||
return getInjectable({
|
||||
id,
|
||||
|
||||
instantiate: () => ({
|
||||
Component: registration.components.Details,
|
||||
|
||||
enabled: computed(() =>
|
||||
extensionShouldBeEnabledForClusterFrame.value.get(),
|
||||
),
|
||||
|
||||
orderNumber:
|
||||
0.5 + (registration.priority ? 100 - registration.priority : 50),
|
||||
}),
|
||||
|
||||
injectionToken: workloadOverviewDetailInjectionToken,
|
||||
});
|
||||
});
|
||||
};
|
||||
},
|
||||
|
||||
injectionToken: extensionRegistratorInjectionToken,
|
||||
});
|
||||
|
||||
export default workloadOverviewDetailRegistratorInjectable;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getInjectable } from "@ogre-tools/injectable";
|
||||
import { computed } from "mobx";
|
||||
import { filter, map, sortBy } from "lodash/fp";
|
||||
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
|
||||
import { workloadOverviewDetailInjectionToken } from "./workload-overview-detail-injection-token";
|
||||
import { pipeline } from "@ogre-tools/fp";
|
||||
|
||||
const workloadOverviewDetailsInjectable = getInjectable({
|
||||
id: "workload-overview-details",
|
||||
|
||||
instantiate: (di) => {
|
||||
const computedInjectMany = di.inject(computedInjectManyInjectable);
|
||||
const details = computedInjectMany(workloadOverviewDetailInjectionToken);
|
||||
|
||||
return computed(() =>
|
||||
pipeline(
|
||||
details.get(),
|
||||
filter((detail) => detail.enabled.get()),
|
||||
sortBy((detail) => detail.orderNumber),
|
||||
map((detail) => detail.Component),
|
||||
),
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export default workloadOverviewDetailsInjectable;
|
||||
Reference in new issue
Block a user