1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/+workloads-cronjobs/cron-job-menu.tsx
Sebastian Malton 41839a259f Remove usages of legacy global cronJobApi
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2023-01-05 13:27:56 -05:00

111 lines
3.5 KiB
TypeScript

/**
* 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 { KubeObjectMenuProps } from "../kube-object-menu";
import type { CronJob, CronJobApi } from "../../../common/k8s-api/endpoints";
import { MenuItem } from "../menu";
import { Icon } from "../icon";
import { Notifications } from "../notifications";
import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable";
import { withInjectables } from "@ogre-tools/injectable-react";
import openConfirmDialogInjectable from "../confirm-dialog/open.injectable";
import type { OpenCronJobTriggerDialog } from "./trigger-dialog/open.injectable";
import openCronJobTriggerDialogInjectable from "./trigger-dialog/open.injectable";
import cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable";
export interface CronJobMenuProps extends KubeObjectMenuProps<CronJob> {}
interface Dependencies {
openConfirmDialog: OpenConfirmDialog;
openCronJobTriggerDialog: OpenCronJobTriggerDialog;
cronJobApi: CronJobApi;
}
const NonInjectedCronJobMenu = ({
object,
toolbar,
openConfirmDialog,
openCronJobTriggerDialog,
cronJobApi,
}: Dependencies & CronJobMenuProps) => (
<>
<MenuItem onClick={() => openCronJobTriggerDialog(object)}>
<Icon
material="play_circle_filled"
tooltip="Trigger"
interactive={toolbar}
/>
<span className="title">Trigger</span>
</MenuItem>
{object.isSuspend()
? (
<MenuItem
onClick={() => openConfirmDialog({
ok: async () => {
try {
await cronJobApi.resume({ namespace: object.getNs(), name: object.getName() });
} catch (err) {
Notifications.checkedError(err, "Unknown error occured while resuming CronJob");
}
},
labelOk: `Resume`,
message: (
<p>
{"Resume CronJob "}
<b>{object.getName()}</b>
?
</p>
),
})}
>
<Icon
material="play_circle_outline"
tooltip="Resume"
interactive={toolbar}
/>
<span className="title">Resume</span>
</MenuItem>
)
: (
<MenuItem
onClick={() => openConfirmDialog({
ok: async () => {
try {
await cronJobApi.suspend({ namespace: object.getNs(), name: object.getName() });
} catch (err) {
Notifications.checkedError(err, "Unknown error occured while suspending CronJob");
}
},
labelOk: `Suspend`,
message: (
<p>
{"Suspend CronJob "}
<b>{object.getName()}</b>
?
</p>),
})}
>
<Icon
material="pause_circle_filled"
tooltip="Suspend"
interactive={toolbar}
/>
<span className="title">Suspend</span>
</MenuItem>
)
}
</>
);
export const CronJobMenu = withInjectables<Dependencies, CronJobMenuProps>(NonInjectedCronJobMenu, {
getProps: (di, props) => ({
...props,
openConfirmDialog: di.inject(openConfirmDialogInjectable),
openCronJobTriggerDialog: di.inject(openCronJobTriggerDialogInjectable),
cronJobApi: di.inject(cronJobApiInjectable),
}),
});