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) => (
)}
)
}
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")}
)
}