import * as Yup from 'yup'; import { IcdType } from '@/@types/diagnosis'; import { OrganizationType, PractitionerType } from '@/@types/doctor'; import AutocompleteDiagnosisControlled from '@/components/autocomplete/AutocompleteDiagnosisControlled'; import { LoadingButton } from '@mui/lab'; import { Paper, Stack, TextField } from '@mui/material'; import { Controller, useForm } from 'react-hook-form'; import { useEffect, useMemo, useState } from 'react'; import { yupResolver } from '@hookform/resolvers/yup'; import { enqueueSnackbar } from 'notistack'; import axios from '@/utils/axios'; import { FormProvider, RHFDatepicker, RHFTextField } from '@/components/hook-form'; import AutocompleteDoctor from '@/components/autocomplete/AutocompleteDoctor'; import AutocompleteHealthcare from '@/components/autocomplete/AutocompleteHealthcare'; export default function ClaimDetail({ claim }) { // -------------------------------------------------------------- // Diagnosis const [primaryDiagnosis, setPrimaryDiagnosis] = useState(null); const [secondaryDiagnosis, setSecondaryDiagnosis] = useState(null); const [loadingDiagnosis, setLoadingDiagnosis] = useState(false); const [primaryDiagnosisOptions, setPrimaryDiagnosisOptions] = useState([]); const [secondaryDiagnosisOptions, setSecondaryDiagnosisOptions] = useState([]); const ClaimDetailSchema = Yup.object().shape({ primary_diagnosis: Yup.object().required('Diagnosis Utama Wajib dipilih'), // secondary_diagnosis: Yup.object().required('Diagnosis Utama Wajib dipilih'), doctor: Yup.object().required('Dokter Harus dipilih'), healthcare: Yup.object().required('Healthcare Harus dipilih'), }); interface FormValuesProps extends Partial { primary_diagnosis: IcdType; secondary_diagnosis: IcdType; doctor: PractitionerType; healthcare: OrganizationType; } const defaultValues = useMemo( () => ({ primary_diagnosis: claim?.primary_diagnosis[0]?.icd ?? null, secondary_diagnosis: claim?.secondary_diagnosis[0]?.icd ?? null, }), [claim] ); const methods = useForm({ resolver: yupResolver(ClaimDetailSchema), defaultValues, }); const { reset, watch, control, setValue, getValues, setError, handleSubmit, formState: { isSubmitting }, } = methods; const values = watch(); const handleSaveDiagnosis = () => { setLoadingDiagnosis(true); axios .post(`claims/${claim.id}/update-diagnosis`, { primary: [getValues('primary_diagnosis')?.id], secondary: [getValues('secondary_diagnosis')?.id], }) .then((res) => { enqueueSnackbar(res.data.message, { variant: 'success' }); }) .catch((err) => { setLoadingDiagnosis(false); enqueueSnackbar(err.response?.data?.message ?? err?.message, { variant: 'error' }); }) .then(() => { setLoadingDiagnosis(false); }); }; useEffect(() => { if (claim) { // SET Default Primary Diagnosis if (claim.primary_diagnosis.length && claim.primary_diagnosis[0].icd) { setPrimaryDiagnosisOptions( claim.primary_diagnosis.map((diagnosis) => { if (diagnosis.icd) { return diagnosis.icd; } }) ); setValue('primary_diagnosis', claim.primary_diagnosis[0].icd); } // SET Default Secondary Diagnosis if (claim.secondary_diagnosis.length && claim.secondary_diagnosis[0].icd) { setSecondaryDiagnosisOptions( claim.secondary_diagnosis.map((diagnosis) => { if (diagnosis.icd) { return diagnosis.icd; } }) ); setValue('secondary_diagnosis', claim.secondary_diagnosis[0].icd); } } }, [claim]); function onSubmit(){ console.log('submit'); } return ( ( )} /> ( )} /> {/* {JSON.stringify(getValues('primary_diagnosis'))} */} ( )} /> ( )} /> {(claim?.status == 'requested' || claim?.status == 'received') && ( { handleSaveDiagnosis(); }} > Simpan Detail )} ); }