1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/+workloads-overview/detail-components.injectable.ts
2022-03-17 08:15:21 -04:00

69 lines
1.7 KiB
TypeScript

/**
* 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;