/* ---------------------------------- @mui ---------------------------------- */ import { Paper, Table as TableContent, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Button, TableSortLabel, Box, Grid, FormControl, InputLabel, Select, MenuItem, InputAdornment, Typography, } from '@mui/material'; import { visuallyHidden } from '@mui/utils'; /* ---------------------------------- react --------------------------------- */ import { Fragment } from 'react'; /* -------------------------------- component ------------------------------- */ import BaseTablePagination from './BaseTablePagination'; /* ---------------------------------- utils --------------------------------- */ import { Download, Search as SearchIcon } from '@mui/icons-material'; /* ---------------------------------- types --------------------------------- */ import { DivisionDataProps, StatusDataProps, TableListProps } from '../@types/table'; import { LoadingButton } from '@mui/lab'; export default function Table({ headCells, rows, paginations, orders, loadings, params, filters, filterStatus, filterStartDate, filterEndDate, searchs, exportReport, exportLoading, }: TableListProps) { /* ------------------------------- handle sort ------------------------------ */ const handleRequestSort = async (event: React.MouseEvent, property: string) => { const isAsc = orders?.orderBy === property && orders?.order === 'asc'; orders?.setOrder(isAsc ? 'desc' : 'asc'); orders?.setOrderBy(property); const parameters = Object.fromEntries([ ...(params?.searchParams.entries() as IterableIterator<[string, string]>), ['order', isAsc ? 'desc' : 'asc'], ['orderBy', property], ]); params?.setAppliedParams(parameters); }; /* -------------------------------------------------------------------------- */ /* -------------------------- enchanced table head -------------------------- */ const EnhancedTableHead = () => { const createSortHandler = (property: string) => (event: React.MouseEvent) => { handleRequestSort(event, property); }; return ( {headCells && headCells.map((headCell, index) => ( {headCell.isSort ? ( {headCell.label} {orders?.orderBy === headCell.id ? ( {orders.order === 'desc' ? 'sorted descending' : 'sorted ascending'} ) : null} ) : ( headCell.label )} ))} ); }; /* -------------------------------------------------------------------------- */ /* ------------------------ button change pagination ------------------------ */ const onPageChangeHandle = async ( event: React.MouseEvent | null, newPage: number ) => { const parameters = Object.fromEntries([ ...(params?.searchParams.entries() as IterableIterator<[string, string]>), ['page', newPage + 1], ['per_page', paginations?.rowsPerPage], ]); paginations?.setPage(newPage); await new Promise((resolve) => setTimeout(resolve, 500)); params?.setAppliedParams(parameters); }; /* -------------------------------------------------------------------------- */ /* --------------------------- row page per limit --------------------------- */ const onRowsPerPageChangeHandle = async (event: React.ChangeEvent) => { params?.searchParams.delete('page'); const parameters = Object.fromEntries([ ...(params?.searchParams.entries() as IterableIterator<[string, string]>), ['per_page', parseInt(event.target.value, 10)], ]); paginations?.setPage(0); paginations?.setRowsPerPage(parseInt(event.target.value, 10)); await new Promise((resolve) => setTimeout(resolve, 500)); params?.setAppliedParams(parameters); }; /* -------------------------------------------------------------------------- */ return ( // {/* Field 1 */} {filters && filters.useFilter ? ( Division
searchs?.setSearchText(event.target.value)} value={searchs?.searchText} fullWidth />
) : null} {searchs && searchs.useSearchs ? ( {filterStatus && filterStatus.useFilter ? (
searchs.setSearchText(event.target.value)} value={searchs.searchText} fullWidth InputProps={{ startAdornment: ( ), }} placeholder="Search Name or Member ID... " />
) : exportReport && exportReport.useExport && filterStatus === undefined ? (
searchs.setSearchText(event.target.value)} value={searchs.searchText} fullWidth InputProps={{ startAdornment: ( ), }} placeholder="Search Name or Member ID... " />
) : (
searchs.setSearchText(event.target.value)} value={searchs.searchText} fullWidth InputProps={{ startAdornment: ( ), }} placeholder="Search Name or Member ID... " />
)}
) : null} {/* Start date */} {filterStartDate && filterStartDate.useFilter ? (
filterStartDate.setStartDate(event.target.value)} fullWidth label="Start Date" InputLabelProps={{ shrink: true, }} />
) : null} {/* End Date */} {filterEndDate && filterEndDate.useFilter ? (
filterEndDate.setEndDate(event.target.value)} fullWidth label="End Date" InputLabelProps={{ shrink: true, }} />
) : null} {/* Filter status */} {filterStatus && filterStatus.useFilter ? ( Status ) : null} {/* Export Report */} {exportReport && exportReport.useExport ? ( } sx={{ p: 1.8 }} onClick={() => exportReport.handleExportReport()} loading={exportLoading} > Export ) : null}
{/* End Field 1 */} {/* Field 2 */} {/* Table */} {/* Table Header */} {/* End Table Header */} {/* Table Body */} {loadings.isLoading && rows && rows.length >= 1 ? ( Loading . . . ) : rows && rows.length >= 1 ? ( rows.map((row, rowIndex) => ( {headCells && //@ts-ignore headCells.map((head, headIndex) => ( //@ts-ignore {row[head.id]} ))} )) ) : loadings.isLoading === false && rows && rows.length === 0 ? ( No Data Found ) : ( Loading . . . )} {/* End Table Body */} {/* End Table */} {/* Pagination */} {paginations && ( )} {/* End Pagination */} {/* End Field 2 */}
//
); }