114 lines
3.0 KiB
JavaScript
114 lines
3.0 KiB
JavaScript
import { DatatablePrime } from '@/components/Datatables'
|
|
import { DialogDelete } from '@/components/Dialog'
|
|
import FormUser from '@/components/Form/User'
|
|
import { Belakang } from '@/components/Layouts'
|
|
import { Judul } from '@/components/TextCustom'
|
|
import { UserDelete, UserGetOne, UserList } from '@/services/manajemen/user-service'
|
|
import Head from 'next/head'
|
|
import { Button } from 'primereact/button'
|
|
import { Column } from 'primereact/column'
|
|
import { Toast } from 'primereact/toast'
|
|
import { useEffect, useRef, useState } from 'react'
|
|
|
|
export default function User() {
|
|
const toast = useRef(null)
|
|
const [data, setData] = useState([])
|
|
const [dialogForm, setDialogForm] = useState(false)
|
|
const [dataEdit, setDataEdit] = useState([])
|
|
const [refresh, setRefresh] = useState(0)
|
|
const [search, setSearch] = useState('')
|
|
const [dialogDelete, setDialogDelete] = useState({})
|
|
|
|
useEffect(() => {
|
|
let params = {}
|
|
|
|
if (search !== null && search !== '') {
|
|
params.search = search
|
|
} else {
|
|
params.search = ''
|
|
}
|
|
|
|
UserList(params).then((res) => {
|
|
setData(res.data)
|
|
})
|
|
}, [refresh, search])
|
|
|
|
const editUser = (data) => {
|
|
UserGetOne({ user_id: data.user_id }).then((res) => {
|
|
if (res.status === 'ok') {
|
|
setDataEdit(res.data)
|
|
setDialogForm(true)
|
|
} else {
|
|
console.log(res.message)
|
|
}
|
|
})
|
|
}
|
|
|
|
const deleteUser = () => {
|
|
UserDelete({ user_id: dialogDelete.user_id }).then((res) => {
|
|
if (res.status === 'success') {
|
|
setRefresh(Math.random)
|
|
setDialogDelete({ visible: false })
|
|
toast.current.show({
|
|
severity: 'success',
|
|
detail: res.message,
|
|
closable: false,
|
|
})
|
|
} else {
|
|
setDialogDelete({ visible: false })
|
|
toast.current.show({
|
|
severity: 'error',
|
|
detail: res.message,
|
|
closable: false,
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
const actionBodyTemplate = (rowData) => {
|
|
return (
|
|
<div className='flex gap-x-2'>
|
|
<Button icon='pi pi-pencil' className='p-button-sm p-button-rounded' onClick={() => editUser(rowData)} />
|
|
<Button
|
|
icon='pi pi-trash'
|
|
className='p-button-sm p-button-rounded p-button-danger'
|
|
onClick={() => setDialogDelete({ user_id: rowData.jenis_id, visible: true })}
|
|
/>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<Toast ref={toast} />
|
|
<Head>
|
|
<title>User</title>
|
|
</Head>
|
|
<Belakang>
|
|
<Judul>User</Judul>
|
|
<DatatablePrime
|
|
data={data}
|
|
setSearch={setSearch}
|
|
dialogForm={dialogForm}
|
|
setDialogForm={setDialogForm}
|
|
Form={FormUser}
|
|
buttonAdd={true}
|
|
buttonAddLabel='Tambah data'
|
|
dataEdit={dataEdit}
|
|
setDataEdit={setDataEdit}
|
|
toast={toast}
|
|
refresh={setRefresh}
|
|
>
|
|
<Column field='nama' header='Nama' sortable></Column>
|
|
<Column field='username' header='Username' sortable></Column>
|
|
<Column header='Action' body={actionBodyTemplate} exportable={false}></Column>
|
|
</DatatablePrime>
|
|
</Belakang>
|
|
|
|
{dialogDelete.visible === true && (
|
|
<DialogDelete data={dialogDelete} setDelete={setDialogDelete} onCallback={deleteUser} />
|
|
)}
|
|
</>
|
|
)
|
|
}
|