fleet/frontend/pages/ManageControlsPage/Scripts/components/DeleteScriptModal/DeleteScriptModal.tsx

90 lines
2.4 KiB
TypeScript
Raw Normal View History

import React, { useContext, useState } from "react";
2023-10-10 22:00:45 +00:00
import scriptAPI from "services/entities/scripts";
import { NotificationContext } from "context/notification";
import Modal from "components/Modal";
import Button from "components/buttons/Button";
import { AxiosResponse } from "axios";
import { IApiError } from "../../../../../interfaces/errors";
import { getErrorMessage } from "../ScriptUploader/helpers";
const baseClass = "delete-script-modal";
interface IDeleteScriptModalProps {
scriptName: string;
scriptId: number;
onCancel: () => void;
2023-10-10 22:00:45 +00:00
onDone: () => void;
isHidden?: boolean;
}
const DeleteScriptModal = ({
scriptName,
scriptId,
onCancel,
2023-10-10 22:00:45 +00:00
onDone,
isHidden = false,
}: IDeleteScriptModalProps) => {
2023-10-10 22:00:45 +00:00
const { renderFlash } = useContext(NotificationContext);
const [isDeleting, setIsDeleting] = useState(false);
2023-10-10 22:00:45 +00:00
const onClickDelete = async (id: number) => {
setIsDeleting(true);
2023-10-10 22:00:45 +00:00
try {
await scriptAPI.deleteScript(id);
renderFlash("success", "Successfully deleted!");
} catch (e) {
const error = e as AxiosResponse<IApiError>;
const apiErrMessage = getErrorMessage(error);
renderFlash(
"error",
apiErrMessage.includes("Policy automation")
? apiErrMessage
: "Couldnt delete. Please try again."
);
2023-10-10 22:00:45 +00:00
}
setIsDeleting(false);
2023-10-10 22:00:45 +00:00
onDone();
};
return (
<Modal
className={baseClass}
title="Delete script"
onExit={onCancel}
2023-10-10 22:00:45 +00:00
onEnter={() => onClickDelete(scriptId)}
isHidden={isHidden}
isContentDisabled={isDeleting}
>
<>
<p>
This action will cancel any pending script execution for{" "}
<span className={`${baseClass}__script-name`}>{scriptName}</span>
</p>
<p>
If the script is currently running on a host it will still complete,
but results won&apos;t appear in Fleet.
</p>
<p>You cannot undo this action.</p>
<div className="modal-cta-wrap">
<Button
type="button"
2023-10-10 22:00:45 +00:00
onClick={() => onClickDelete(scriptId)}
variant="alert"
className="delete-loading"
isLoading={isDeleting}
>
Delete
</Button>
<Button onClick={onCancel} variant="inverse-alert">
Cancel
</Button>
</div>
</>
</Modal>
);
};
export default DeleteScriptModal;