import * as Yup from 'yup'; import { useSnackbar } from 'notistack'; import { useNavigate } from 'react-router-dom'; import { yupResolver } from '@hookform/resolvers/yup'; import { Controller, useForm } from 'react-hook-form'; import React, { useEffect, useMemo, useState } from 'react'; import axios from '../../utils/axios'; import { FormProvider, RHFTextField } from '../../components/hook-form'; import { Autocomplete, Button, Grid, Stack, Table, TableBody, TableCell, TableRow, TextField, Typography, useTheme, List, ListItem, IconButton, ListItemAvatar, Avatar, ListItemText, } from '@mui/material'; import Iconify from '../../components/Iconify'; import { LoadingButton } from '@mui/lab'; import { fCurrency } from '../../utils/formatNumber'; import MemberSelectDialog from '../../components/dialogs/MemberSelectDialog'; import { Add, DeleteOutline } from '@mui/icons-material'; type Props = { isEdit: boolean; currentClaim?: any; }; export default function ClaimForm({ isEdit, currentClaim }: Props) { const navigate = useNavigate(); const { enqueueSnackbar } = useSnackbar(); const NewCorporateSchema = Yup.object().shape({ name: Yup.string().required('Name is required'), code: Yup.string().required('Corporate Code is required'), active: Yup.boolean().required('Corporate Status is required'), // file: Yup.boolean().required('Corporate Status is required'), }); const defaultValues = useMemo( () => ({ member: currentClaim?.member || {}, member_id: currentClaim?.member_id || null, diagnosis_id: currentClaim?.diagnosis_id || null, total_claim: currentClaim?.total_claim || 0, }), // eslint-disable-next-line react-hooks/exhaustive-deps [currentClaim] ); const methods = useForm({ resolver: yupResolver(NewCorporateSchema), defaultValues, }); const { reset, watch, control, setValue, getValues, setError, handleSubmit, formState: { isSubmitting }, } = methods; const values = watch(); const [isCheckingLimit, setIsCheckingLimit] = useState(false); const [isEligible, setIsEligible] = useState(false); const [memberBenefits, setMemberBenefits] = useState([]); const [diagnosisOption, setDiagnosisOption] = useState([]); const [isMemberDialogOpen, setIsMemberDialogOpen] = useState(false); const [member, setMember] = useState({}) useEffect(() => { console.log('defaultValues', defaultValues); if (isEdit && currentClaim) { reset(defaultValues); setMember(defaultValues.member) } if (!isEdit) { reset(defaultValues); setMember(defaultValues.member) } }, [isEdit, currentClaim]); const fileSelected = (event, type) => { const files = event.target.files; const currentFiles = getValues(`uploaded_files.${type}`) ?? []; setValue(`uploaded_files.${type}`, [...currentFiles, ...files]); console.log('currentFiles', getValues('uploaded_files')); }; const memberSelected = (member) => { setMember(member) }; const checkLimit = async () => { console.log('CHECKING LIMIT'); }; const onSubmit = async (data: any) => { try { if (!isEdit) { const response = await axios.post('/claims', data); } else { const response = await axios.put('/claims/' + currentClaim?.id ?? '', data); } reset(); enqueueSnackbar( !isEdit ? 'Organizations Created Successfully!' : 'Organizations Udpated Successfully!', { variant: 'success' } ); navigate('/claims'); } catch (error: any) { if (error && error.response.status === 422) { for (const [key, value] of Object.entries(error.response.data.errors)) { setError(key, { message: value[0] }); enqueueSnackbar(value[0] ?? 'Failed Processing Request', { variant: 'error' }); } } else { enqueueSnackbar(error.message ?? 'Failed Processing Request', { variant: 'error' }); } } const ascent = document?.querySelector('ascent'); if (ascent != null) { ascent.innerHTML = ''; } }; function generate(files, element: React.ReactElement) { return files.map((value) => React.cloneElement(element, { key: value, }) ); } const headStyle = {}; return ( Member { if (!isEdit) setIsMemberDialogOpen(true); if (isEdit) enqueueSnackbar('Cannot Change Member', { variant: 'error' }); }} /> {/* */} {member?.id && ( Name {member?.full_name} DOB {member?.birth_date} ({member?.age + ' years'}) Marital Status {member?.marital_status} Record Type {member?.record_type} Principal ID {member?.principal_id} ( {member?.relation_with_principal})
Plan {member?.current_plan?.code} Active {member?.current_plan?.start} -{' '} {member?.current_plan?.end} (Active) Corporate Limit {fCurrency(0)} / {fCurrency(member?.current_plan?.limit_rules)} Plan Usage {fCurrency(0)} / {fCurrency(member?.current_plan?.limit_rules)}
)} ( option ? `#${option.id} (${option.code}) ${option.description}` : '' } value={value || ''} onChange={(event: any, newValue: any) => { setValue('benefit_id', newValue?.id); onChange(newValue); }} renderInput={(params) => ( { // if (event.key === 'Enter') // searchDiagnosis(event.target.value) // }} /> )} /> )} /> ( (option ? `(${option.code}) ${option.name}` : '')} value={value || ''} onChange={(event: any, newValue: any) => { setValue('diagnosis_id', newValue?.id); // setValue('diagnosis', newValue) onChange(newValue); }} renderInput={(params) => ( { if (event.key === 'Enter') searchDiagnosis(event.target.value); }} /> )} /> )} /> {isCheckingLimit && ( {/* Checking */} Please Wait, Checking Eligibilty )} {false && isCheckingLimit == false && isEligible == null && ( {/* No Data Selected */} Please Select Diagnosis ! )} {!isCheckingLimit && isEligible !== null && isEligible && ( {/* Eligible */} Diagnosis is Eligible 125.000.000 / 125.000.000 )} {!isCheckingLimit && isEligible !== null && !isEligible && ( {/* Not Eligible */} {/* Not Eligible 125.000.000 / 125.000.000 */} )} {isEdit && ( Documents {(getValues('uploaded_files.invoice') && getValues('uploaded_files.invoice').length ? getValues('uploaded_files.invoice') : [] ).map((file, index) => ( } > {/* */} I ))} {(getValues('uploaded_files.prescription') && getValues('uploaded_files.prescription').length ? getValues('uploaded_files.prescription') : [] ).map((file, index) => ( } > {/* */} P ))} {(getValues('uploaded_files.diagnosis') && getValues('uploaded_files.diagnosis').length ? getValues('uploaded_files.diagnosis') : [] ).map((file, index) => ( } > {/* */} DR ))} )} {isEligible === true ? ( Create Claim ) : ( Check Limit )}
); }