import React, { useState, useEffect } from "react"; import { makeStyles, Paper, Grid, TextField, Table, TableHead, TableBody, TableCell, TableRow, IconButton, FormControl, InputLabel, MenuItem, Select } from "@material-ui/core"; import { Formik, Form, Field } from 'formik'; import ButtonWithSpinner from "../ButtonWithSpinner"; import ConfirmationModal from "../ConfirmationModal"; import { Edit as EditIcon } from "@material-ui/icons"; import { toast } from "react-toastify"; import usePlans from "../../hooks/usePlans"; import { i18n } from "../../translate/i18n"; const useStyles = makeStyles(theme => ({ root: { width: '100%' }, mainPaper: { width: '100%', flex: 1, padding: theme.spacing(2) }, fullWidth: { width: '100%' }, tableContainer: { width: '100%', overflowX: "scroll", ...theme.scrollbarStyles }, textfield: { width: '100%' }, textRight: { textAlign: 'right' }, row: { paddingTop: theme.spacing(2), paddingBottom: theme.spacing(2) }, control: { paddingRight: theme.spacing(1), paddingLeft: theme.spacing(1) }, buttonContainer: { textAlign: 'right', padding: theme.spacing(1) } })); export function PlanManagerForm(props) { const { onSubmit, onDelete, onCancel, initialValue, loading } = props; const classes = useStyles() const [record, setRecord] = useState({ name: '', users: 0, connections: 0, queues: 0, value: 0, useCampaigns: true, useSchedules: true, useInternalChat: true, useExternalApi: true, useKanban: true, useOpenAi: true, useIntegrations: true, }); useEffect(() => { setRecord(initialValue) }, [initialValue]) const handleSubmit = async (data) => { onSubmit(data) } return ( setTimeout(() => { handleSubmit(values) resetForm() }, 500) } > {(values) => (
{/* NOME */} {/* USUARIOS */} {/* CONEXOES */} {/* FILAS */} {/* VALOR */} {/* CAMPANHAS */} {i18n.t("plans.form.campaigns")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* AGENDAMENTOS */} {i18n.t("plans.form.schedules")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* CHAT INTERNO */} {i18n.t("plans.form.internalChat")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* API Externa */} {i18n.t("plans.form.externalApi")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* KANBAN */} {i18n.t("plans.form.kanban")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* OPENAI */} Open.Ai {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} {/* INTEGRACOES */} {i18n.t("plans.form.integrations")} {i18n.t("plans.form.enabled")} {i18n.t("plans.form.disabled")} onCancel()} variant="contained"> {i18n.t("plans.form.clear")} {record.id !== undefined ? ( onDelete(record)} variant="contained" color="secondary"> {i18n.t("plans.form.delete")} ) : null} {i18n.t("plans.form.save")}
)}
) } export function PlansManagerGrid(props) { const { records, onSelect } = props const classes = useStyles() const renderCampaigns = (row) => { return row.useCampaigns === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderSchedules = (row) => { return row.useSchedules === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderInternalChat = (row) => { return row.useInternalChat === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderExternalApi = (row) => { return row.useExternalApi === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderKanban = (row) => { return row.useKanban === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderOpenAi = (row) => { return row.useOpenAi === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; const renderIntegrations = (row) => { return row.useIntegrations === false ? `${i18n.t("plans.form.no")}` : `${i18n.t("plans.form.yes")}`; }; return ( # {i18n.t("plans.form.name")} {i18n.t("plans.form.users")} {i18n.t("plans.form.connections")} {i18n.t("plans.form.queues")} {i18n.t("plans.form.value")} {i18n.t("plans.form.campaigns")} {i18n.t("plans.form.schedules")} {i18n.t("plans.form.internalChat")} {i18n.t("plans.form.externalApi")} {i18n.t("plans.form.kanban")} Open.Ai {i18n.t("plans.form.integrations")} {records.map((row) => ( onSelect(row)} aria-label="delete"> {row.name || '-'} {row.users || '-'} {row.connections || '-'} {row.queues || '-'} {i18n.t("plans.form.money")} {row.value ? row.value.toLocaleString('pt-br', { minimumFractionDigits: 2 }) : '00.00'} {renderCampaigns(row)} {renderSchedules(row)} {renderInternalChat(row)} {renderExternalApi(row)} {renderKanban(row)} {renderOpenAi(row)} {renderIntegrations(row)} ))}
) } export default function PlansManager() { const classes = useStyles() const { list, save, update, remove } = usePlans() const [showConfirmDialog, setShowConfirmDialog] = useState(false) const [loading, setLoading] = useState(false) const [records, setRecords] = useState([]) const [record, setRecord] = useState({ name: '', users: 0, connections: 0, queues: 0, value: 0, useCampaigns: true, useSchedules: true, useInternalChat: true, useExternalApi: true, useKanban: true, useOpenAi: true, useIntegrations: true, }) useEffect(() => { async function fetchData() { await loadPlans() } fetchData() // eslint-disable-next-line react-hooks/exhaustive-deps }, [record]) const loadPlans = async () => { setLoading(true) try { const planList = await list() setRecords(planList) } catch (e) { toast.error(i18n.t("plans.toasts.errorList")) } setLoading(false) } const handleSubmit = async (data) => { setLoading(true) console.log(data) try { if (data.id !== undefined) { await update(data) } else { await save(data) } await loadPlans() handleCancel() toast.success(i18n.t("plans.toasts.success")) } catch (e) { toast.error(i18n.t("plans.toasts.error")) } setLoading(false) } const handleDelete = async () => { setLoading(true) try { await remove(record.id) await loadPlans() handleCancel() toast.success(i18n.t("plans.toasts.success")) } catch (e) { toast.error(i18n.t("plans.toasts.errorOperation")) } setLoading(false) } const handleOpenDeleteDialog = () => { setShowConfirmDialog(true) } const handleCancel = () => { setRecord({ id: undefined, name: '', users: 0, connections: 0, queues: 0, value: 0, useCampaigns: true, useSchedules: true, useInternalChat: true, useExternalApi: true, useKanban: true, useOpenAi: true, useIntegrations: true }) } const handleSelect = (data) => { let useCampaigns = data.useCampaigns === false ? false : true let useSchedules = data.useSchedules === false ? false : true let useInternalChat = data.useInternalChat === false ? false : true let useExternalApi = data.useExternalApi === false ? false : true let useKanban = data.useKanban === false ? false : true let useOpenAi = data.useOpenAi === false ? false : true let useIntegrations = data.useIntegrations === false ? false : true setRecord({ id: data.id, name: data.name || '', users: data.users || 0, connections: data.connections || 0, queues: data.queues || 0, value: data.value?.toLocaleString('pt-br', { minimumFractionDigits: 0 }) || 0, useCampaigns, useSchedules, useInternalChat, useExternalApi, useKanban, useOpenAi, useIntegrations }) } return ( setShowConfirmDialog(false)} onConfirm={() => handleDelete()} > {i18n.t("plans.confirm.message")} ) }