import React, { useState, useEffect } from "react"; import { size } from "lodash"; import { IQueryFormData } from "interfaces/query"; import useDeepEffect from "hooks/useDeepEffect"; import Checkbox from "components/forms/fields/Checkbox"; // @ts-ignore import InputField from "components/forms/fields/InputField"; import Button from "components/buttons/Button"; import Modal from "components/Modal"; export interface INewQueryModalProps { baseClass: string; queryValue: string; onCreateQuery: (formData: IQueryFormData) => void; setIsSaveModalOpen: (isOpen: boolean) => void; backendValidators: { [key: string]: string }; } const validateQueryName = (name: string) => { const errors: { [key: string]: string } = {}; if (!name) { errors.name = "Query name must be present"; } const valid = !size(errors); return { valid, errors }; }; const NewQueryModal = ({ baseClass, queryValue, onCreateQuery, setIsSaveModalOpen, backendValidators, }: INewQueryModalProps): JSX.Element => { const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [observerCanRun, setObserverCanRun] = useState(false); const [errors, setErrors] = useState<{ [key: string]: string }>( backendValidators ); useDeepEffect(() => { if (name) { setErrors({}); } }, [name]); useEffect(() => { setErrors(backendValidators); }, [backendValidators]); const handleUpdate = (evt: React.MouseEvent) => { evt.preventDefault(); const { valid, errors: newErrors } = validateQueryName(name); setErrors({ ...errors, ...newErrors, }); if (valid) { onCreateQuery({ description, name, query: queryValue, observer_can_run: observerCanRun, }); } }; return ( setIsSaveModalOpen(false)}>
setName(value)} value={name} error={errors.name} inputClassName={`${baseClass}__query-save-modal-name`} label="Name" placeholder="What is your query called?" /> setDescription(value)} value={description} inputClassName={`${baseClass}__query-save-modal-description`} label="Description" type="textarea" placeholder="What information does your query reveal? (optional)" /> Observers can run

Users with the Observer role will be able to run this query on hosts where they have access.


); }; export default NewQueryModal;