/** * 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 {} interface Dependencies { openConfirmDialog: OpenConfirmDialog; openCronJobTriggerDialog: OpenCronJobTriggerDialog; cronJobApi: CronJobApi; } const NonInjectedCronJobMenu = ({ object, toolbar, openConfirmDialog, openCronJobTriggerDialog, cronJobApi, }: Dependencies & CronJobMenuProps) => ( <> openCronJobTriggerDialog(object)}> Trigger {object.isSuspend() ? ( 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: (

{"Resume CronJob "} {object.getName()} ?

), })} > Resume
) : ( 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: (

{"Suspend CronJob "} {object.getName()} ?

), })} > Suspend
) } ); export const CronJobMenu = withInjectables(NonInjectedCronJobMenu, { getProps: (di, props) => ({ ...props, openConfirmDialog: di.inject(openConfirmDialogInjectable), openCronJobTriggerDialog: di.inject(openCronJobTriggerDialogInjectable), cronJobApi: di.inject(cronJobApiInjectable), }), });