import { DataTable } from '@/components/ui/DataTable'; import { getColumns, Group } from './Column'; import { apiConfig } from '@/config/api.config'; import axios, { AxiosResponse } from 'axios'; import { Helmet } from 'react-helmet'; import { DialogContent, MenuItem, Radio, RadioGroup, FormControlLabel, FormControl, Dialog, DialogTitle, Typography, Button, Box, Breadcrumbs, Link } from '@mui/material'; import { useState, useEffect } from 'react'; // import IconButton from '@mui/material/IconButton'; import CloseIcon from '@mui/icons-material/Close'; import Divider from '@mui/material/Divider'; import ConfirmDialog from '@/components/confirm'; import { toast } from 'sonner'; import { Container, DataGridLoader, DataGridProvider, LoaderTransparant } from '@/components'; import { ListToolBar } from './ListToolbar'; import { RefreshCw } from 'lucide-react'; import { setgroups } from 'process'; // import { DialogHeader } from '@/components/ui/dialog'; // import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; const BASE_URL = apiConfig.service_customer; let initGroup = { id: '', groupName: '', status: '', description: '', pin_length: '', max_pin_attempts: '', default_notification: '' }; const ManageGroups = () => { const [isDialogOpen, setIsDialogOpen] = useState(false); const [loading, setLoading] = useState(false); const [dataGroup, setDataGroup] = useState([]); const [formData, setFormData] = useState(initGroup); const [pageIndex, setPageIndex] = useState(1); const [pageSize, setPageSize] = useState(10); const [dialogType, setDialogType] = useState(''); const [dialogOpen, setDialogOpen] = useState(false); const [isReloading, setIsReloading] = useState(false); // const closeDialog = () => { // setIsDialogOpen(false); // setgroups(initGroup); // }; useEffect(() => { fetchGroups(); }, []); async function fetchGroups(): Promise { setIsReloading(true); try { let groups = await axios.get(`${BASE_URL}/groups/list`, { params: { limit: 20, page: 1, with_deleted: false, order_field: 'created_at', order_direction: 'DESC' } }); let temp = 1; let resGroups = groups.data.data.list.map((el: any) => { el.no = temp++; if (el.date_birth) { const d = new Date(el.date_birth); el.date_birth = d.toLocaleString('sv-SE'); } return el; }); setDataGroup(resGroups); } catch (error: any) { alert(error.message); console.log(error); } finally { // setLoading(false); setIsReloading(false); } } const openDialog = () => setIsDialogOpen(true); const closeDialog = () => { setIsDialogOpen(false); setFormData(initGroup); }; const handleChange = (e: React.ChangeEvent) => { setFormData({ ...formData, [e.target.name]: e.target.value }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.groupName) return toast.warning(`Group name can not be empty!`); if (!formData.status) return toast.warning(`Status can not be empty!`); if (!formData.description) return toast.warning(`Description can not be empty!`); setIsDialogOpen(false); setDialogOpen(true); }; function createGroup() { setDialogType('create'); openDialog(); } const handleUpdate = (group: any) => { setFormData({ ...formData, id: group.id, groupName: group.name, status: group.status, description: group.description }); setDialogType('update'); setIsDialogOpen(true); }; const handleDelete = (group: any) => { setFormData({ ...formData, id: group.id, groupName: group.name, status: group.status, description: group.description }); setDialogType('delete'); setDialogOpen(true); }; const handleReload = () => { setIsReloading(true); fetchGroups(); }; const handleYes = async () => { setIsReloading(true); try { if (dialogType === 'create') { await axios.post(`${BASE_URL}/groups/create`, { name: formData.groupName, status: formData.status, description: formData.description, created_at: new Date() }); toast.success(`Success create group`); } else if (dialogType === 'update') { await axios.put(`${BASE_URL}/groups/update/${formData.id}`, { name: formData.groupName, status: formData.status, description: formData.description, updated_at: new Date() }); toast.success(`Success update group`); } else if (dialogType === 'delete') { await axios.delete(`${BASE_URL}/groups/delete/${formData.id}/true`); toast.success(`Success delete group`); } } catch (error: any) { console.log(error); toast.error(error.message); } finally { setDialogOpen(false); closeDialog(); await fetchGroups(); setLoading(false); } }; function setShowAddDialog(el: any) { setIsDialogOpen(el); } if (loading) return ; return ( <> TPAY | Manage Group setDialogOpen(false)} title="Confirm Action" content={ `Are you sure you want to ` + (dialogType === 'create' ? 'create?' : dialogType === 'update' ? 'update?' : 'delete?') } onYes={handleYes} onNo={() => setDialogOpen(false)} />

Groups

Dashboard Groups Manage Groups {/*
*/}
{isReloading && ( //
//
//
// // Refreshing data... //
//
//
)} } layout={{ card: true }} serverSide={false} onRowSelectionChange={(selected, table: any) => { const selectedRow = table.getSelectedRowModel().rows[0]; if (selectedRow) handleUpdate(selectedRow.original); }} />
{/*
*/}
{dialogType === 'create' ? 'Create New Group' : 'Update Group'}
} label="Yes" /> } label="No" />
); }; export default ManageGroups;