import * as React from 'react'; import { FC, Fragment, ReactElement, useRef, useState } from 'react'; import { FilterOutlined, SearchOutlined, EditOutlined, } from '@ant-design/icons'; import { Button, Input } from '@imphnen-frontend-service/ui/atoms'; import { DataTable, Filter } from '@imphnen-frontend-service/ui/organisms'; import { ColumnDef, getCoreRowModel, getPaginationRowModel, PaginationState, useReactTable, RowSelectionState, } from '@tanstack/react-table'; import ModalEditAccount from './_components/modal-edit-account'; import { useQueryState } from '@imphnen-frontend-service/utils'; import { useUserList, useUpdateUserById, TUsersListItem, } from '@imphnen-frontend-service/service'; export const Components: FC = (): ReactElement => { const [showModalEditAccount, setShowModalEditAccount] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [search, setSearch] = useState(''); const pendingFormData = useRef(null); const { step: currentStep, nextStep, prevStep, resetStep, } = useQueryState('step', { defaultValue: 1, maxValue: 2, minValue: 1, }); const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 9, }); const [rowSelection, setRowSelection] = React.useState({}); const [showFilter, setShowFilter] = useState(false); const { data: usersData, isLoading } = useUserList({ search, page: pagination.pageIndex + 1, per_page: pagination.pageSize, }); const updateUser = useUpdateUserById(); const users: TUsersListItem[] = usersData?.data ?? []; const totalItems = usersData?.meta?.total ?? users.length; const handleEditAccount = async () => { if (selectedUser && pendingFormData.current) { await updateUser.mutateAsync({ id: selectedUser.id, data: pendingFormData.current }); } }; const columns: ColumnDef[] = [ { id: 'select', header: ({ table }) => ( ), cell: ({ row }) => ( ), }, { header: 'No', accessorKey: 'id', }, { header: 'Nama Lengkap', accessorKey: 'fullname', }, { header: 'Email', accessorKey: 'email', }, { header: 'Role', accessorKey: 'role', }, { header: 'Status', accessorKey: 'is_active', cell: ({ row }) => ( {row.original.is_active ? 'Aktif' : 'Tidak Aktif'} ), }, { header: 'Action', cell: ({ row }) => ( ), }, ]; const table = useReactTable({ data: users, columns, state: { pagination, rowSelection, }, enableRowSelection: true, onRowSelectionChange: setRowSelection, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), onPaginationChange: setPagination, pageCount: Math.ceil(totalItems / pagination.pageSize), manualPagination: true, }); return (

Data Akun

setSearch(e.target.value)} />
{showFilter && (
setShowFilter(false)} options={[]} />
)}
{isLoading ? (
Loading...
) : ( )}
setShowModalEditAccount(false)} handleEditAccount={handleEditAccount} nextStep={nextStep} prevStep={prevStep} resetStep={resetStep} initialValues={selectedUser ? { fullname: selectedUser.fullname, email: selectedUser.email } : undefined} onDataCapture={(data) => { pendingFormData.current = data; }} />
); }; export default Components;