import React, { useContext, useState } from "react"; import { useQuery } from "react-query"; import { NotificationContext } from "context/notification"; import scriptAPI from "services/entities/scripts"; import Button from "components/buttons/Button"; import CustomLink from "components/CustomLink"; import DataError from "components/DataError"; import Editor from "components/Editor"; import Modal from "components/Modal"; import ModalFooter from "components/ModalFooter"; import Spinner from "components/Spinner"; import paths from "router/paths"; import { ScriptContent } from "interfaces/script"; import { DEFAULT_USE_QUERY_OPTIONS } from "utilities/constants"; import { getErrorMessage } from "../ScriptUploader/helpers"; const baseClass = "edit-script-modal"; interface IEditScriptModal { onExit: () => void; scriptId: number; scriptName: string; } const validate = (scriptContent: string) => { if (scriptContent.trim() === "") { return "Script cannot be empty"; } return null; }; const EditScriptModal = ({ scriptId, scriptName, onExit, }: IEditScriptModal) => { const { renderFlash } = useContext(NotificationContext); // Editable script content const [scriptFormData, setScriptFormData] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const [formError, setFormError] = useState(null); const { error: isSelectedScriptContentError, isLoading: isLoadingSelectedScriptContent, } = useQuery( [scriptId], () => scriptAPI.downloadScript(scriptId), { ...DEFAULT_USE_QUERY_OPTIONS, onSuccess: (scriptContent) => { setScriptFormData(scriptContent); }, } ); const onChange = (value: string) => { setScriptFormData(value); setFormError(validate(value)); }; const onSave = async () => { if (isSubmitting) { return; } try { setIsSubmitting(true); await scriptAPI.updateScript(scriptId, scriptFormData, scriptName); renderFlash("success", "Successfully saved script."); onExit(); } catch (e) { renderFlash("error", getErrorMessage(e)); } finally { setIsSubmitting(false); } }; const onSubmit = async (e: React.FormEvent) => { e.preventDefault(); onSave(); }; const renderContent = () => { if (isLoadingSelectedScriptContent) { return ; } if (isSelectedScriptContentError) { return ; } return ( <>
To run this script on a host, go to the{" "} page and select a host.
To run the script across multiple hosts, add a policy automation on the page.
} /> ); }; return ( {renderContent()} ); }; export default EditScriptModal;