import React, { useState, useEffect } from "react"; import { useHistory } from "react-router-dom"; import { toast } from "react-toastify"; import Button from "@material-ui/core/Button"; import TextField from "@material-ui/core/TextField"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import DialogTitle from "@material-ui/core/DialogTitle"; import Autocomplete from "@material-ui/lab/Autocomplete"; import CircularProgress from "@material-ui/core/CircularProgress"; import { green } from "@material-ui/core/colors"; import { makeStyles } from "@material-ui/core/styles"; import { i18n } from "../../translate/i18n"; import api from "../../services/api"; const useStyles = makeStyles(theme => ({ root: { display: "flex", flexWrap: "wrap", }, btnWrapper: { // margin: theme.spacing(1), position: "relative", }, buttonProgress: { color: green[500], position: "absolute", top: "50%", left: "50%", marginTop: -12, marginLeft: -12, }, })); const NewTicketModal = ({ modalOpen, onClose }) => { const history = useHistory(); const classes = useStyles(); const userId = +localStorage.getItem("userId"); const [options, setOptions] = useState([]); const [loading, setLoading] = useState(false); const [searchParam, setSearchParam] = useState(""); const [selectedContact, setSelectedContact] = useState(null); useEffect(() => { if (!modalOpen || searchParam.length < 3) return; setLoading(true); const delayDebounceFn = setTimeout(() => { const fetchContacts = async () => { try { const { data } = await api.get("contacts", { params: { searchParam }, }); setOptions(data.contacts); setLoading(false); } catch (err) { console.log(err); if (err.response && err.response.data && err.response.data.error) { toast.error(err.response.data.error); } } }; fetchContacts(); }, 500); return () => clearTimeout(delayDebounceFn); }, [searchParam, modalOpen]); const handleClose = () => { onClose(); setSearchParam(""); setSelectedContact(null); }; const handleSaveTicket = async e => { e.preventDefault(); if (!selectedContact) return; setLoading(true); try { const { data: ticket } = await api.post("/tickets", { contactId: selectedContact.id, userId: userId, status: "open", }); history.push(`/tickets/${ticket.id}`); } catch (err) { console.log(err); if (err.response && err.response.data && err.response.data.error) { toast.error(err.response.data.error); } } setLoading(false); handleClose(); }; return (