import { isNil, get } from "lodash"; import React, { useCallback } from "react"; import PropTypes from "prop-types"; import Button from "antd/lib/button"; import Modal from "antd/lib/modal"; import DynamicForm from "@/components/dynamic-form/DynamicForm"; import { wrap as wrapDialog, DialogPropType } from "@/components/DialogWrapper"; function QuerySnippetDialog({ querySnippet, dialog, readOnly }) { const handleSubmit = useCallback( (values, successCallback, errorCallback) => { const querySnippetId = get(querySnippet, "id"); if (isNil(values.description)) { values.description = ""; } dialog .close(querySnippetId ? { id: querySnippetId, ...values } : values) .then(() => successCallback("Saved.")) .catch(() => errorCallback("Failed saving snippet.")); }, [dialog, querySnippet] ); const isEditing = !!get(querySnippet, "id"); const formFields = [ { name: "trigger", title: "Trigger", type: "text", required: true, autoFocus: !isEditing }, { name: "description", title: "Description", type: "text" }, { name: "snippet", title: "Snippet", type: "ace", required: true }, ].map(field => ({ ...field, readOnly, initialValue: get(querySnippet, field.name, "") })); return ( {readOnly ? "Close" : "Cancel"} , !readOnly && ( ), ]} wrapProps={{ "data-test": "QuerySnippetDialog", }}> ); } QuerySnippetDialog.propTypes = { dialog: DialogPropType.isRequired, querySnippet: PropTypes.object, readOnly: PropTypes.bool, }; QuerySnippetDialog.defaultProps = { querySnippet: null, readOnly: false, }; export default wrapDialog(QuerySnippetDialog);