// @mui import { Box, Button, Card, Collapse, IconButton, MenuItem, Table, TableBody, TableCell, TableRow, TextField, Typography, Stack, Menu, ButtonGroup, Link, Chip, TableHead, Grid, } 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'; import FindInPageOutlinedIcon from '@mui/icons-material/FindInPageOutlined'; import EditOutlinedIcon from '@mui/icons-material/EditOutlined'; // hooks import React, { ChangeEvent, useEffect, useRef, useState } from 'react'; import { Navigate, useNavigate, useSearchParams } from 'react-router-dom'; import useSettings from '@/hooks/useSettings'; // 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 { Divider } from '@mui/material'; import Iconify from '@/components/Iconify'; import DialogDetailClaim from '@/components/dialogs/DialogDetailClaim'; import { fDateTimesecond } from '@/utils/formatTime'; import { capitalizeFirstLetter } from '@/utils/formatString'; import Label from '@/components/Label'; import TableMoreMenu from '@/components/table/TableMoreMenu'; // import LoadingButton from '@/theme/overrides/LoadingButton'; export default function List() { const { themeColorPresets } = useSettings(); 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 [importLoading, setImportLoading] = useState(false); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const handleImportButton = () => { if (importForm?.current) { handleClose(); importForm.current ? importForm.current.click() : console.log('No File selected'); } else { alert('No file selected'); } }; const handleCancelImportButton = () => { importForm.current.value = ''; importForm.current.dispatchEvent(new Event('change', { bubbles: true })); }; const handleImportChange = (event: any) => { if (event.target.files[0]) { setCurrentImportFileName(event.target.files[0].name); } else { setCurrentImportFileName(null); } }; const handleUpload = () => { if (importForm.current?.files.length) { const formData = new FormData(); formData.append('file', importForm.current?.files[0]); setImportLoading(true); axios .post(`claim-requests/import`, formData) .then((response) => { handleCancelImportButton(); loadDataTableData(); setImportResult(response.data); // alert('Succesfully read '+ response.data.total_successed_row + ' with ' + response.data.total_failed_row + ' failed rows'); setImportLoading(false); }) .catch((response) => { enqueueSnackbar( 'Looks like something went wrong. Please check your data and try again. ' + response.message, { variant: 'error' } ); setImportLoading(false); }); } else { enqueueSnackbar('No File Selected', { variant: 'warning' }); } }; const handleGetTemplate = (type :string) => { axios.get('corporates/import-document-example/' + type) .then((response) => { const link = document.createElement('a'); link.href = response.data.data.file_url; link.setAttribute('download', response.data.data.file_name); document.body.appendChild(link); link.click(); handleClose(); }) } const handleGetData = (type :string) => { axios.get(`corporates/${corporate_id}/data-plan-benefit`) .then((response) => { const link = document.createElement('a'); link.href = response.data.data.file_url; link.setAttribute('download', response.data.data.file_name); document.body.appendChild(link); link.click(); handleClose(); }) } return (
{!currentImportFileName && ( Import {handleGetTemplate('claim-request')}}>Download Template test {handleGetData('data-plan-benefit')}}>Download Claim Request )} {currentImportFileName && ( } sx={{ p: 1.8 }} onClick={handleUpload} loading={importLoading} > Upload )}
); } // 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 ? : } */ } { // handleShowClaim(row); // }} > {row.code} {row.member?.full_name} {row.service_name} {row.payment_type_name} { row.status == "requested" ? () : () } navigate(`/claim-requests/edit/${row.id}`)}> Edit ''}> Detail } /> {/* { handleShowClaim(row); }} > */} {/* COLLAPSIBLE ROW */} } spacing={1} sx={{ marginY: 2 }} > Berkas Hasil Penunjang {/* {row.files_by_type?.claim_kondisi && row.files_by_type?.claim_kondisi.map((file, index) => ( -{' '} {file.name} ))} */} {row.files_by_type?.claim_kondisi && ( <> - Kondisi {row.files_by_type?.claim_kondisi.map((file, index) => ( {file.name} ))} )} {row.files_by_type?.claim_diagnosis && ( <> - Diagnosa {row.files_by_type?.claim_diagnosis.map((file, index) => ( {file.name} ))} )} {row.files_by_type?.claim_result && ( <> - Hasil {row.files_by_type?.claim_result.map((file, index) => ( {file.name} ))} )} {(!row.files_by_type?.claim_result && !row.files_by_type?.claim_diagnosis && !row.files_by_type?.claim_kondisi)&& Tidak ada berkas} ); } { /* ------------------ END TABLE ROW ------------------ */ } function TableContent() { return ( {/* ------------------ TABLE HEADER ------------------ */} {/* */} Code Name Date of Submission Service Type Claim Method Status {/* ------------------ END TABLE HEADER ------------------ */} {/* ------------------ TABLE ROW ------------------ */} {dataTableIsLoading ? ( Loading ) : dataTableData.data.length === 0 ? ( No Data ) : ( {dataTableData.data.map((row) => ( ))} )} {/* ------------------ END TABLE ROW ------------------ */}
); } // --------------------------------------------------------- // Dialog Detail Claim Request const [openDialogDetailClaim, setOpenDialogDetailClaim] = useState(false); const [loadingClaimDetail, setLoadingClaimDetail] = useState(true); const [currentClaim, setCurrentClaim] = useState(null); function handleShowClaim(claimRequest) { setLoadingClaimDetail(true); setOpenDialogDetailClaim(true); axios .get(`/claim-requests/${claimRequest.id}`) .then(({ data }) => { setCurrentClaim(data.data); setLoadingClaimDetail(false); }) .catch((err) => { enqueueSnackbar(err.message, { variant: 'error' }); }); } function handleDownloadLog() {} return ( } /> ); }