import React, { useState, useEffect } from "react"; import { useHistory } from "react-router-dom"; import Button from "@material-ui/core/Button"; import TextField from "@material-ui/core/TextField"; import Dialog from "@material-ui/core/Dialog"; import Select from "@material-ui/core/Select"; import FormControl from "@material-ui/core/FormControl"; import InputLabel from "@material-ui/core/InputLabel"; import MenuItem from "@material-ui/core/MenuItem"; import { makeStyles } from "@material-ui/core"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import DialogTitle from "@material-ui/core/DialogTitle"; import Autocomplete, { createFilterOptions, } from "@material-ui/lab/Autocomplete"; import CircularProgress from "@material-ui/core/CircularProgress"; import { i18n } from "../../translate/i18n"; import api from "../../services/api"; import ButtonWithSpinner from "../ButtonWithSpinner"; import toastError from "../../errors/toastError"; import useQueues from "../../hooks/useQueues"; const useStyles = makeStyles((theme) => ({ maxWidth: { width: "100%", }, })); const filterOptions = createFilterOptions({ trim: true, }); const TransferTicketModal = ({ modalOpen, onClose, ticketid }) => { const history = useHistory(); const [options, setOptions] = useState([]); const [queues, setQueues] = useState([]); const [allQueues, setAllQueues] = useState([]); const [loading, setLoading] = useState(false); const [searchParam, setSearchParam] = useState(""); const [selectedUser, setSelectedUser] = useState(null); const [selectedQueue, setSelectedQueue] = useState(''); const classes = useStyles(); const { findAll: findAllQueues } = useQueues(); useEffect(() => { const loadQueues = async () => { const list = await findAllQueues(); setAllQueues(list); setQueues(list); } loadQueues(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { if (!modalOpen || searchParam.length < 3) { setLoading(false); return; } setLoading(true); const delayDebounceFn = setTimeout(() => { const fetchUsers = async () => { try { const { data } = await api.get("/users/", { params: { searchParam }, }); setOptions(data.users); setLoading(false); } catch (err) { setLoading(false); toastError(err); } }; fetchUsers(); }, 500); return () => clearTimeout(delayDebounceFn); }, [searchParam, modalOpen]); const handleClose = () => { onClose(); setSearchParam(""); setSelectedUser(null); }; const handleSaveTicket = async e => { e.preventDefault(); if (!ticketid) return; setLoading(true); try { let data = {}; if (selectedUser) { data.userId = selectedUser.id } if (selectedQueue && selectedQueue !== null) { data.queueId = selectedQueue if (!selectedUser) { data.status = 'pending'; data.userId = null; } } // test del PARA APARECER NA FILA DE OUTRO ATENDENTE E O MESMO CLICAR EM ACEITAR AO INVES DE ENVIAR PARA ATENDENDO data.status = 'pending' await api.put(`/tickets/${ticketid}`, data); setLoading(false); history.push(`/tickets`); } catch (err) { setLoading(false); toastError(err); } }; return (
{i18n.t("transferTicketModal.title")} `${option.name}`} onChange={(e, newValue) => { setSelectedUser(newValue); if (newValue != null && Array.isArray(newValue.queues)) { setQueues(newValue.queues); } else { setQueues(allQueues); setSelectedQueue(''); } }} options={options} filterOptions={filterOptions} freeSolo autoHighlight noOptionsText={i18n.t("transferTicketModal.noOptions")} loading={loading} renderInput={params => ( setSearchParam(e.target.value)} InputProps={{ ...params.InputProps, endAdornment: ( {loading ? ( ) : null} {params.InputProps.endAdornment} ), }} /> )} /> {i18n.t("transferTicketModal.fieldQueueLabel")} {i18n.t("transferTicketModal.buttons.ok")}
); }; export default TransferTicketModal;