import { createOrUpdateUser, deleteUser, getAllUsers } from '@/api/Admin' import { ButtonCopy } from '@/components/CopyClipboard/CopyClipboard' import DataTableAll from '@/components/DataTable/DataTable' import { get, post } from '@/rtk/helpers/apiService' import { update, Xdelete } from '@/rtk/helpers/CRUD' import { TUser } from '@/variables/types' import { Badge, Box, Button, Code, Dialog, Group, Modal, MultiSelect, Switch, Text, TextInput, } from '@mantine/core' import { useForm } from '@mantine/form' import { IconEdit, IconX } from '@tabler/icons-react' import { useEffect, useState } from 'react' import classes from './UsersManagement.module.css' const UsersManagement = () => { const [users, setUsers] = useState([]) const [action, setAction] = useState('') const [activeBtn, setActiveBtn] = useState(false) const [item, setItem] = useState({ id: 0, is_permanent: false }) const [disableBtn, setDisableBtn] = useState(false) const [info, setInfo] = useState('') const [isPermanentConfirmOpen, setIsPermanentConfirmOpen] = useState(false) const columns = [ { name: 'id', size: '5%', header: 'ID', }, { name: 'name', size: '20%', header: 'Name', }, { name: 'email', size: '25%', header: 'Email', }, { name: 'permission', size: '20%', header: 'Permission', render: (row: TUser) => { if (row.permission.includes(',')) { return row?.permission?.split(',').map((p) => { return {p} }) } else { return {row.permission} } }, }, { name: 'is_permanent', size: '20%', header: 'Employment Type', render: (row: TUser) => { return row.is_permanent ? ( Permanent ) : ( Probation ) }, }, { name: '#', size: '10%', header: 'Action', render: (row: TUser) => { return ( { setAction('edit') setItem(row) form.reset() form.setValues(row) }} width={20} height={20} /> { setAction('delete') setItem(row) }} width={20} height={20} /> ) }, }, ] const form = useForm({ initialValues: { id: 0, name: '', email: '', permission: '', is_permanent: false, }, }) const getAll = async () => { try { const res = await get(getAllUsers) if (res.status) { setUsers(res.data) } } catch (error) { console.log(error) } } const handleCreate = async (values: TUser) => { try { const { id, ...data } = values const res = await post(createOrUpdateUser, data) if (res.status === true) { setAction('review') form.reset() getAll() setInfo(JSON.stringify(res.data, null, 2)) } } catch (error) { console.log(error) } } const handleUpdate = async (values: TUser) => { try { const res = await update(createOrUpdateUser, values, getAll) if (res === true) { setAction('') setIsPermanentConfirmOpen(false) form.reset() } } catch (error) { console.log(error) } } const handleDelete = async (id: number) => { try { await Xdelete(deleteUser, { id: id }, getAll) } catch (error) { console.log(error) } } useEffect(() => { getAll() }, []) return (

Admin/ Users Management

{/* Add/Edit User modal */} { setAction('') setIsPermanentConfirmOpen(false) form.reset() }} title={ {action === 'add' ? 'Add User' : 'Update User'} } >
{ setDisableBtn(true) if (action === 'edit') { if (values.is_permanent && !item.is_permanent) { setIsPermanentConfirmOpen(true) } else { await handleUpdate(values) } } else { await handleCreate(values) } setDisableBtn(false) })} > form.setFieldValue('name', e.target.value)} required /> form.setFieldValue('email', e.target.value)} required /> p.trim() !== '') : form.values.permission } error={form.errors.permisstion} onChange={(e) => form.setFieldValue( 'permission', e!.filter((p) => p.trim() !== '').join(','), ) } mb={'md'} /> {action === 'edit' && !item.is_permanent ? ( form.setFieldValue( 'is_permanent', event.currentTarget.checked, ) } /> ) : ( '' )} {action === 'add' ? ( ) : ( )}
{ setAction('') }} size={'lg'} title={ Information to get started } > !! Important note: Please remind user to change password after logging in !! {info} {/* Confirm change to permanent employee */} setIsPermanentConfirmOpen(false)} centered size="sm" classNames={{ content: classes.deleteModal, }} > Confirm Update This action will change the employment type from{' '} Probation to Permanent. Are you sure you want to proceed? setAction('')} size="lg" radius="md" position={{ top: 30, right: 10 }} > Do you want to delete this user?
) } export default UsersManagement