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, { useRef, useEffect, useMemo, useState } from 'react'; import axios from '../../../utils/axios'; import { FormProvider, RHFDatepicker, RHFTextField } from '../../../components/hook-form'; import { makeFormData } from '@/utils/jsonToFormData'; import { Autocomplete, Button, Grid, Stack, Table, TableBody, TableCell, TableRow, TextField, Typography, useTheme, List, ListItem, IconButton, ListItemAvatar, Avatar, ListItemText, Card, InputAdornment, Divider, ButtonBase, Box, DialogActions, } from '@mui/material'; import Iconify from '../../../components/Iconify'; import CalendarTodayIcon from '@mui/icons-material/CalendarToday'; import { LoadingButton } from '@mui/lab'; import { fCurrency } from '../../../utils/formatNumber'; import MemberSelectDialog from '../../../components/dialogs/MemberSelectDialog'; import { Add, ArrowBackIosNew, DeleteOutline } from '@mui/icons-material'; import { ClaimRequest, Files } from '@/@types/claims'; import { fDateOnly, fDateTimesecond, fPostFormat } from '@/utils/formatTime'; import RHFDatePicker from '@/components/hook-form/RHFDatePickerV2'; import RHFDateTimePicker from '@/components/hook-form/v2/RHFDateTimePicker'; import MuiDialog from '@/components/MuiDialog'; interface FormValuesProps extends Partial { taxes: boolean; inStock: boolean; } type Props = { isEdit: boolean; currentClaim?: ClaimRequest; }; export default function FormEdit({ isEdit, currentClaim }: Props) { const navigate = useNavigate(); const { enqueueSnackbar } = useSnackbar(); const EditClaimSchema = Yup.object().shape({ date: Yup.string().required('Date Submission is required'), }); const defaultValues = useMemo( () => ({ id: currentClaim?.id || '-', code: currentClaim?.code || '-', member_name: currentClaim?.name || '-', date: currentClaim?.submission_date ? fDateTimesecond(currentClaim?.submission_date) : '-', claim_method: currentClaim?.claim_method || '-', service_type: currentClaim?.service_type || '-', organization_id: currentClaim?.provider_code || '-', }), [currentClaim] ); const [date, setDate] = useState(currentClaim?.submission_date ? fDateTimesecond(currentClaim?.submission_date) : null) const id = currentClaim?.id useEffect(() => { setDate(currentClaim?.submission_date) }, [currentClaim]); useEffect(() => { if (isEdit && currentClaim) { reset(defaultValues); } if (!isEdit) { reset(defaultValues); } }, [isEdit, currentClaim]); const methods = useForm({ resolver: yupResolver(EditClaimSchema), defaultValues, }); const { reset, watch, control, setValue, getValues, handleSubmit, formState: { isSubmitting }, } = methods; // ---------------------------------------------------------------------- const onSubmit = async (data: FormValuesProps) => { try { const formData = new FormData(); // formData.append('result_files', fileHasilPenunjangs); // formData.append('diagnosa_files', fileDiagnosaInput); // formData.append('kondisi_files', fileKondisiInput); // formData.append('provider_code', data.organization_id); // formData.append('_method', 'PUT'); // formData.append('date', fPostFormat(id)); // const response = await axios.post(`/claim-requests/${data.id}/update`, formData); reset(); enqueueSnackbar('Claim Request Updated Successfully!', { variant: 'success' }); navigate('/claim-requests'); } 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('Failed Processing Request', { variant: 'error' }); } } else { enqueueSnackbar(error.message ?? 'Failed Processing Request', { variant: 'error' }); } } }; const handleApprove = () => { if(selectedReason.value != '-'){ const formData = makeFormData({ date: fPostFormat(date), reason: selectedReason.value, }); const response = axios.post(`/claim-requests/${id}/update`, formData); if (!response.error){ reset(); enqueueSnackbar('Claim Request Updated Successfully!', { variant: 'success' }); navigate('/claim-requests'); } else { enqueueSnackbar('Claim Request Updated Error!', { variant: 'error' }); } } else { setError('Please select a reason') } } const [openDialog, setOpenDialog] = useState(false); const style1 = { color: '#919EAB', width: '30%' } const style2 = { width: '70%' } const marginBottom1 = { marginBottom: 1, } const marginBottom2 = { marginBottom: 2, } const handleCloseDialog = () => { setOpenDialog(false); } const reason = [ { value: 'Wrong Setting', label: 'Wrong Setting' }, { value: 'Hospital Request', label: 'Hospital Request' } ]; const [selectedReason, setSelectedReason] = React.useState({value:'-', label:''}); const [error, setError] = useState(''); const getContent = () => ( Are you sure to update this claim ? Code {currentClaim?.code} Name {currentClaim?.name} Date of Submission {date ? fDateTimesecond(date) : '-'} Claim Method {currentClaim?.claim_method} Service Type {currentClaim?.service_type || '-'} Code Provider {currentClaim?.provider_code || '-'} Reason for Update* option.label} fullWidth value={selectedReason} onChange={(event, newValue) => { setSelectedReason(newValue); // Validasi jika newValue adalah null if (!newValue) { setError('Please select a reason'); } else { setError(''); } }} renderInput={(params) => ( )} /> ) return ( navigate(`/claim-requests`)} > {'Edit Claim Requests'} Code* Name* {/* */} Date of Submission* Claim Method* Service Type* Code Provider* ( setDate(field.value) } dateFormat='dd MMM yyyy HH:mm:ss' /> )} /> ); }