import * as React from 'react'; import Timeline from '@mui/lab/Timeline'; import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem'; import TimelineSeparator from '@mui/lab/TimelineSeparator'; import TimelineConnector from '@mui/lab/TimelineConnector'; import TimelineContent from '@mui/lab/TimelineContent'; import TimelineDot from '@mui/lab/TimelineDot'; import {Typography, Card, Stack, ButtonBase, Box, Divider} from '@mui/material'; import { styled } from '@mui/material/styles'; import Paper from '@mui/material/Paper'; import Button from '@mui/material/Button'; import AddIcon from '@mui/icons-material/Add'; import Iconify from '../../components/Iconify'; import { useEffect, useState, useRef } from 'react'; import { format } from 'date-fns'; import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; import DescriptionIcon from '@mui/icons-material/Description'; import { LoadingButton } from '@mui/lab'; import axios from '../../utils/axios'; import { makeFormData } from '@/utils/jsonToFormData'; import { enqueueSnackbar } from 'notistack'; import { useParams} from 'react-router-dom'; const Item1 = styled(Paper)(({ theme }) => ({ ...theme.typography.body2, padding: theme.spacing(1), textAlign: 'center', backgroundColor: '#919EAB29', color: '#637381', width: 'fit-content', marginRight: 'auto', })); const Item2 = styled(Paper)(({ theme }) => ({ backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', ...theme.typography.body2, padding: theme.spacing(1), textAlign: 'center', color: theme.palette.text.secondary, width: 'fit-content', marginLeft: 'auto', })); export default function NoOppositeContent({data}) { const [timeline, setTimeline] = useState(null); const [requestFile, setRequestFile] = useState(null); const [document, setDocument] = useState(null); useEffect(() => { if (data && data.data) { setTimeline(data.data.timeline); setRequestFile(data.data.request_files); setDocument(data.data.documents); } }, [data]); // Diagnosis const fileRequestDocumentInputDiagnosis = useRef(null); const [fileDiagnosis, setFileDiagnosis] = useState([]); const handleRequestDocumentInputChangeDiagnosis = (event) => { if (event.target.files[0]) { setFileDiagnosis([...fileDiagnosis, ...event.target.files]); } }; const removeFileDiagnois = (filesState, index) => { setFileDiagnosis( filesState.filter((file, fileIndex) => { return fileIndex != index; }) ); }; // Kondisi const fileRequestDocumentInputKondisi = useRef(null); const [fileKondisi, setFileKondisi] = useState([]); const handleRequestDocumentInputChangeKondisi = (event) => { if (event.target.files[0]) { setFileKondisi([...fileKondisi, ...event.target.files]); } }; const removeFileKondisi = (filesState, index) => { setFileKondisi( filesState.filter((file, fileIndex) => { return fileIndex != index; }) ); }; // Result const fileRequestDocumentInputResult = useRef(null); const [fileResult, setFileResult] = useState([]); const handleRequestDocumentInputChangeResult = (event) => { if (event.target.files[0]) { setFileResult([...fileResult, ...event.target.files]); } }; const removeFileResult = (filesState, index) => { setFileResult( filesState.filter((file, fileIndex) => { return fileIndex != index; }) ); }; const { id } = useParams(); const [submitLoading, setSubmitLoading] = useState(false); const submitRequestFiles = () => { setSubmitLoading(true); const formData = makeFormData({ fileDiagnosis: fileDiagnosis, fileKondisis: fileKondisi, fileResults: fileResult }); axios .post('claim-requests/'+id+'/request-files', formData) .then((response) => { window.location.reload(); }) .catch(({ response }) => { enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' }); }); } const submitButton = requestFile?.find((dataRequestFile) => dataRequestFile.check_files === null); return ( <> {timeline?.map((dataTimeline, index) => ( {dataTimeline.date ? format(new Date(dataTimeline.date), "d MMM yyyy") : ''} {dataTimeline.date ? format(new Date(dataTimeline.date), "HH : mm") : ''} {dataTimeline.txt_status} Detail: {dataTimeline.description} {dataTimeline.status === 'reviewed' && requestFile ? ( <> {submitButton ? ( Request Document ) : ( Request Document Success Uploaded )} {/* Diagnosis */} {requestFile?.map((dataRequestFile, index) => { if(dataRequestFile.type !== 'claim-diagnosis' || dataRequestFile.check_files !== null){ return null; } return ( Diagnosis } spacing={1} sx={{ marginY: 2 }} > {fileDiagnosis && fileDiagnosis.map((file, index) => ( {file.name ? file.name : '-'} { removeFileDiagnois(fileDiagnosis, index); }} sx={{cursor: 'pointer'}} > ))} fileRequestDocumentInputDiagnosis.current?.click()} > Add Result handleRequestDocumentInputChangeDiagnosis(event)} accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" /> ); })} {/* Kondisi */} {requestFile?.map((dataRequestFile, index) => { if(dataRequestFile.type !== 'claim-kondisi' || dataRequestFile.check_files !== null){ return null; } return ( Condition } spacing={1} sx={{ marginY: 2 }} > {fileKondisi && fileKondisi.map((file, index) => ( {file.name ? file.name : '-'} { removeFileKondisi(fileKondisi, index); }} sx={{cursor: 'pointer'}} > ))} fileRequestDocumentInputKondisi.current?.click()} > Add Result handleRequestDocumentInputChangeKondisi(event)} accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" /> ); })} {/* Supporting Result */} {requestFile?.map((dataRequestFile, index) => { if(dataRequestFile.type !== 'claim-result' || dataRequestFile.check_files !== null){ return null; } return ( Supporting Result } spacing={1} sx={{ marginY: 2 }} > {fileResult && fileResult.map((file, index) => ( {file.name ? file.name : '-'} { removeFileResult(fileResult, index); }} sx={{cursor: 'pointer'}} > ))} fileRequestDocumentInputResult.current?.click()} > Add Result handleRequestDocumentInputChangeResult(event)} accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" /> ); })} {submitButton ? ( { submitRequestFiles(); }} loading={submitLoading} > Submit ) : ''} ) : ''} {dataTimeline.status === 'requested' ? ( Documents {document?.map((dataDocument, index) => ( {dataDocument.type === 'claim-diagnosis' ? 'Diagnosis' : dataDocument.type === 'claim-kondisi' ? 'Condition' : dataDocument.type === 'claim-result' ? 'Supporting Result' : dataDocument.type === 'claim-invoice' ? 'Invoice' : ''} {dataDocument.original_name ? dataDocument.original_name : '-'} ))} ) : ''} ))} ); }