/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import React from "react";
import type { RegisteredEntitySetting } from "../../../../extensions/registries";
import { HotbarAddCommand } from "../../hotbar/hotbar-add-command";
import { HotbarRemoveCommand } from "../../hotbar/hotbar-remove-command";
import { HotbarSwitchCommand } from "../../hotbar/hotbar-switch-command";
import { HotbarRenameCommand } from "../../hotbar/hotbar-rename-command";
import { ActivateEntityCommand } from "../../activate-entity-command";
import type { CommandContext, CommandRegistration } from "./commands";
import { getInjectable } from "@ogre-tools/injectable";
import commandOverlayInjectable from "../command-overlay.injectable";
import createTerminalTabInjectable from "../../dock/terminal/create-terminal-tab.injectable";
import type { DockTabCreate } from "../../dock/dock/store";
import navigateToPreferencesInjectable from "../../../../common/front-end-routing/routes/preferences/navigate-to-preferences.injectable";
import navigateToHelmChartsInjectable from "../../../../common/front-end-routing/routes/cluster/helm/charts/navigate-to-helm-charts.injectable";
import navigateToHelmReleasesInjectable from "../../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable";
import navigateToConfigMapsInjectable from "../../../../common/front-end-routing/routes/cluster/config/config-maps/navigate-to-config-maps.injectable";
import navigateToSecretsInjectable from "../../../../common/front-end-routing/routes/cluster/config/secrets/navigate-to-secrets.injectable";
import navigateToResourceQuotasInjectable from "../../../../common/front-end-routing/routes/cluster/config/resource-quotas/navigate-to-resource-quotas.injectable";
import navigateToLimitRangesInjectable from "../../../../common/front-end-routing/routes/cluster/config/limit-ranges/navigate-to-limit-ranges.injectable";
import navigateToHorizontalPodAutoscalersInjectable from "../../../../common/front-end-routing/routes/cluster/config/horizontal-pod-autoscalers/navigate-to-horizontal-pod-autoscalers.injectable";
import navigateToPodDisruptionBudgetsInjectable from "../../../../common/front-end-routing/routes/cluster/config/pod-disruption-budgets/navigate-to-pod-disruption-budgets.injectable";
import navigateToPriorityClassesInjectable from "../../../../common/front-end-routing/routes/cluster/config/priority-classes/navigate-to-priority-classes.injectable";
import navigateToServicesInjectable from "../../../../common/front-end-routing/routes/cluster/network/services/navigate-to-services.injectable";
import navigateToEndpointsInjectable from "../../../../common/front-end-routing/routes/cluster/network/endpoints/navigate-to-endpoints.injectable";
import navigateToIngressesInjectable from "../../../../common/front-end-routing/routes/cluster/network/ingresses/navigate-to-ingresses.injectable";
import navigateToNetworkPoliciesInjectable from "../../../../common/front-end-routing/routes/cluster/network/network-policies/navigate-to-network-policies.injectable";
import navigateToNodesInjectable from "../../../../common/front-end-routing/routes/cluster/nodes/navigate-to-nodes.injectable";
import navigateToPodsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/pods/navigate-to-pods.injectable";
import navigateToDeploymentsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/deployments/navigate-to-deployments.injectable";
import navigateToDaemonsetsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/daemonsets/navigate-to-daemonsets.injectable";
import navigateToStatefulsetsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/statefulsets/navigate-to-statefulsets.injectable";
import navigateToJobsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/jobs/navigate-to-jobs.injectable";
import navigateToCronJobsInjectable from "../../../../common/front-end-routing/routes/cluster/workloads/cron-jobs/navigate-to-cron-jobs.injectable";
import navigateToCustomResourcesInjectable from "../../../../common/front-end-routing/routes/cluster/custom-resources/custom-resources/navigate-to-custom-resources.injectable";
import navigateToEntitySettingsInjectable from "../../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable";
import getEntitySettingCommandsInjectable from "./get-entity-setting-commands.injectable";
export function isKubernetesClusterActive(context: CommandContext): boolean {
return context.entity?.kind === "KubernetesCluster";
}
interface Dependencies {
openCommandDialog: (component: React.ReactElement) => void;
getEntitySettingItems: (kind: string, apiVersion: string, source?: string) => RegisteredEntitySetting[];
createTerminalTab: () => DockTabCreate;
navigateToPreferences: () => void;
navigateToHelmCharts: () => void;
navigateToHelmReleases: () => void;
navigateToConfigMaps: () => void;
navigateToSecrets: () => void;
navigateToResourceQuotas: () => void;
navigateToLimitRanges: () => void;
navigateToHorizontalPodAutoscalers: () => void;
navigateToPodDisruptionBudgets: () => void;
navigateToPriorityClasses: () => void;
navigateToServices: () => void;
navigateToEndpoints: () => void;
navigateToIngresses: () => void;
navigateToNetworkPolicies: () => void;
navigateToNodes: () => void;
navigateToPods: () => void;
navigateToDeployments: () => void;
navigateToDaemonsets: () => void;
navigateToStatefulsets: () => void;
navigateToJobs: () => void;
navigateToCronJobs: () => void;
navigateToCustomResources: () => void;
navigateToEntitySettings: (entityId: string) => void;
}
function getInternalCommands(dependencies: Dependencies): CommandRegistration[] {
return [
{
id: "app.showPreferences",
title: "Preferences: Open",
action: () => dependencies.navigateToPreferences(),
},
{
id: "cluster.viewHelmCharts",
title: "Cluster: View Helm Charts",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToHelmCharts(),
},
{
id: "cluster.viewHelmReleases",
title: "Cluster: View Helm Releases",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToHelmReleases(),
},
{
id: "cluster.viewConfigMaps",
title: "Cluster: View ConfigMaps",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToConfigMaps(),
},
{
id: "cluster.viewSecrets",
title: "Cluster: View Secrets",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToSecrets(),
},
{
id: "cluster.viewResourceQuotas",
title: "Cluster: View ResourceQuotas",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToResourceQuotas(),
},
{
id: "cluster.viewLimitRanges",
title: "Cluster: View LimitRanges",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToLimitRanges(),
},
{
id: "cluster.viewHorizontalPodAutoscalers",
title: "Cluster: View HorizontalPodAutoscalers (HPA)",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToHorizontalPodAutoscalers(),
},
{
id: "cluster.viewPodDisruptionBudget",
title: "Cluster: View PodDisruptionBudgets",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToPodDisruptionBudgets(),
},
{
id: "cluster.viewPriorityClasses",
title: "Cluster: View PriorityClasses",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToPriorityClasses(),
},
{
id: "cluster.viewServices",
title: "Cluster: View Services",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToServices(),
},
{
id: "cluster.viewEndpoints",
title: "Cluster: View Endpoints",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToEndpoints(),
},
{
id: "cluster.viewIngresses",
title: "Cluster: View Ingresses",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToIngresses(),
},
{
id: "cluster.viewNetworkPolicies",
title: "Cluster: View NetworkPolicies",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToNetworkPolicies,
},
{
id: "cluster.viewNodes",
title: "Cluster: View Nodes",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToNodes(),
},
{
id: "cluster.viewPods",
title: "Cluster: View Pods",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToPods(),
},
{
id: "cluster.viewDeployments",
title: "Cluster: View Deployments",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToDeployments(),
},
{
id: "cluster.viewDaemonSets",
title: "Cluster: View DaemonSets",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToDaemonsets(),
},
{
id: "cluster.viewStatefulSets",
title: "Cluster: View StatefulSets",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToStatefulsets(),
},
{
id: "cluster.viewJobs",
title: "Cluster: View Jobs",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToJobs(),
},
{
id: "cluster.viewCronJobs",
title: "Cluster: View CronJobs",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToCronJobs(),
},
{
id: "cluster.viewCustomResourceDefinitions",
title: "Cluster: View Custom Resource Definitions",
isActive: isKubernetesClusterActive,
action: () => dependencies.navigateToCustomResources(),
},
{
id: "entity.viewSettings",
title: ({ entity }) => `${entity.kind}/${entity.getName()}: View Settings`,
action: ({ entity }) => dependencies.navigateToEntitySettings(entity.getId()),
isActive: ({ entity }) => (
entity
&& dependencies.getEntitySettingItems(entity.kind, entity.apiVersion, entity.metadata.source).length > 0
),
},
{
id: "cluster.openTerminal",
title: "Cluster: Open terminal",
action: () => dependencies.createTerminalTab(),
isActive: isKubernetesClusterActive,
},
{
id: "hotbar.switchHotbar",
title: "Hotbar: Switch ...",
action: () => dependencies.openCommandDialog(),
},
{
id: "hotbar.addHotbar",
title: "Hotbar: Add Hotbar ...",
action: () => dependencies.openCommandDialog(),
},
{
id: "hotbar.removeHotbar",
title: "Hotbar: Remove Hotbar ...",
action: () => dependencies.openCommandDialog(),
},
{
id: "hotbar.renameHotbar",
title: "Hotbar: Rename Hotbar ...",
action: () => dependencies.openCommandDialog(),
},
{
id: "catalog.searchEntities",
title: "Catalog: Activate Entity ...",
action: () => dependencies.openCommandDialog(),
},
];
}
const internalCommandsInjectable = getInjectable({
id: "internal-commands",
instantiate: (di) => getInternalCommands({
openCommandDialog: di.inject(commandOverlayInjectable).open,
getEntitySettingItems: di.inject(getEntitySettingCommandsInjectable),
createTerminalTab: di.inject(createTerminalTabInjectable),
navigateToPreferences: di.inject(navigateToPreferencesInjectable),
navigateToHelmCharts: di.inject(navigateToHelmChartsInjectable),
navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable),
navigateToConfigMaps: di.inject(navigateToConfigMapsInjectable),
navigateToSecrets: di.inject(navigateToSecretsInjectable),
navigateToResourceQuotas: di.inject(navigateToResourceQuotasInjectable),
navigateToLimitRanges: di.inject(navigateToLimitRangesInjectable),
navigateToHorizontalPodAutoscalers: di.inject(navigateToHorizontalPodAutoscalersInjectable),
navigateToPodDisruptionBudgets: di.inject(navigateToPodDisruptionBudgetsInjectable),
navigateToPriorityClasses: di.inject(navigateToPriorityClassesInjectable),
navigateToServices: di.inject(navigateToServicesInjectable),
navigateToEndpoints: di.inject(navigateToEndpointsInjectable),
navigateToIngresses: di.inject(navigateToIngressesInjectable),
navigateToNetworkPolicies: di.inject(navigateToNetworkPoliciesInjectable),
navigateToNodes: di.inject(navigateToNodesInjectable),
navigateToPods: di.inject(navigateToPodsInjectable),
navigateToDeployments: di.inject(navigateToDeploymentsInjectable),
navigateToDaemonsets: di.inject(navigateToDaemonsetsInjectable),
navigateToStatefulsets: di.inject(navigateToStatefulsetsInjectable),
navigateToJobs: di.inject(navigateToJobsInjectable),
navigateToCronJobs: di.inject(navigateToCronJobsInjectable),
navigateToCustomResources: di.inject(navigateToCustomResourcesInjectable),
navigateToEntitySettings: di.inject(navigateToEntitySettingsInjectable),
}),
});
export default internalCommandsInjectable;