// @mui import { Box, Button, Card, Collapse, IconButton, MenuItem, Table, TableBody, TableCell, TableRow, TextField, Typography, Stack, Menu, ButtonGroup, Link, Chip, } from '@mui/material'; import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; import AddIcon from '@mui/icons-material/Add'; import UploadIcon from '@mui/icons-material/Upload'; import CancelIcon from '@mui/icons-material/Cancel'; // hooks import React, { ChangeEvent, useEffect, useRef, useState } from 'react'; import { Navigate, useNavigate, useSearchParams } from 'react-router-dom'; // components import axios from '../../utils/axios'; import { LaravelPaginatedData, LaravelPaginatedDataDefault } from '../../@types/paginated-data'; import DataTable from '../../components/LaravelTable'; import { fCurrency } from '../../utils/formatNumber'; import EditRoundedIcon from '@mui/icons-material/EditRounded'; import { LoadingButton } from '@mui/lab'; import { enqueueSnackbar } from 'notistack'; // import LoadingButton from '@/theme/overrides/LoadingButton'; export default function List() { const [searchParams, setSearchParams] = useSearchParams(); const [importResult, setImportResult] = useState(null); const navigate = useNavigate(); function SearchInput(props: any) { // SEARCH const searchInput = useRef(null); const [searchText, setSearchText] = useState(''); const handleSearchChange = (event: any) => { const newSearchText = event.target.value ?? ''; setSearchText(newSearchText); }; const handleSearchSubmit = (event: any) => { event.preventDefault(); props.onSearch({ search: searchText }); // Trigger to Parent }; useEffect(() => { // Trigger First Search setSearchText(searchParams.get('search') ?? ''); }, []); return (
); } function ImportForm(props: any) { // IMPORT // Create Button Menu const [anchorEl, setAnchorEl] = React.useState(null); const createMenu = Boolean(anchorEl); const importForm = useRef(null); const [currentImportFileName, setCurrentImportFileName] = useState(null); const handleClose = () => { setAnchorEl(null); }; return (
{/* */}
); } // Dummy Default Data const [dataTableIsLoading, setDataTableLoading] = useState(true); const [dataTableData, setDataTableData] = useState( LaravelPaginatedDataDefault ); const loadDataTableData = async (appliedFilter: any | null = null) => { setDataTableLoading(true); const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); const response = await axios.get('/claim-requests', { params: filter }); // console.log(response.data); setDataTableLoading(false); setDataTableData(response.data); }; const applyFilter = async (searchFilter: { search: string }) => { await loadDataTableData(searchFilter); setSearchParams(searchFilter); }; const handlePageChange = (event: ChangeEvent, value: number): void => { const filter = Object.fromEntries([...searchParams.entries(), ['page', value]]); loadDataTableData(filter); setSearchParams(filter); }; const handleApprove = (claimRequest) => { axios.post(`claim-requests/${claimRequest.id}/approve`) .then((response) => { enqueueSnackbar('Success Approve', {variant: 'success'}) loadDataTableData() }) .catch(({response}) => { enqueueSnackbar(response.data.message ?? 'Something went wrong!', {variant : "error"}) }) } useEffect(() => { loadDataTableData(); }, []); const headStyle = { fontWeight: 'bold', }; // Called on every row to map the data to the columns function createData(data: any): any { return { ...data, }; } { /* ------------------ TABLE ROW ------------------ */ } function Row(props: { row: ReturnType }) { const { row } = props; const [open, setOpen] = React.useState(false); const [loadingApprove, setLoadingApprove] = React.useState(false); return ( *': { borderBottom: 'unset' } }}> setOpen(!open)}> {open ? : } {row.code} {row.member?.full_name} {row.submission_date} { row.status == 'requested' && ( {handleApprove(row)}}>Approve )} {/* COLLAPSIBLE ROW */} Description : {row.description} ); } { /* ------------------ END TABLE ROW ------------------ */ } function TableContent() { return ( {/* ------------------ TABLE HEADER ------------------ */} Code Member Name Submission Date Status Action {/* ------------------ END TABLE HEADER ------------------ */} {/* ------------------ TABLE ROW ------------------ */} {dataTableIsLoading ? ( Loading ) : dataTableData.data.length === 0 ? ( No Data ) : ( {dataTableData.data.map((row) => ( ))} )} {/* ------------------ END TABLE ROW ------------------ */}
); } return ( } /> ); }