// @mui import { styled } from '@mui/material/styles'; import { Typography, LinearProgress, linearProgressClasses, Stack, FormControlLabel, } from '@mui/material'; import { LoadingButton } from '@mui/lab'; import Checkbox from '@mui/material/Checkbox'; // components import MuiDialog from '../../components/MuiDialog'; import { FormProvider, RHFTextField } from '../../components/hook-form'; // React import { useContext, ReactElement, useEffect, useState } from 'react'; import { fCurrency } from '../../utils/formatNumber'; import { UserCurrentCorporateContext } from '../../contexts/UserCurrentCorporate'; // yup import * as Yup from 'yup'; // form import { useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import axios from '../../utils/axios'; import { enqueueSnackbar } from 'notistack'; /* ---------------------------------- types --------------------------------- */ type MuiDialogProps = { title?: { name?: string; icon?: string; }; openDialog: boolean; setOpenDialog: Function; content?: ReactElement; data?: DataProps; }; type DataProps = { companyName: string; policyNumber: number; totalMembers: number; totalCases: number; totalPersen: number; myLimit: { balance: number; total: number; percentage: number; }; maxTopUp: number; }; type FormValuesProps = { topup: string; }; /* -------------------------------------------------------------------------- */ const BorderLinearProgress = styled(LinearProgress)(({ theme }) => ({ height: 10, borderRadius: 6, [`&.${linearProgressClasses.colorPrimary}`]: { backgroundColor: theme.palette.grey[theme.palette.mode === 'light' ? 300 : 800], }, [`& .${linearProgressClasses.bar}`]: { borderRadius: 6, background: 'linear-gradient(270deg, #19BBBB 38.42%, #FF9565 76.21%, #FE7253 104.02%)', }, })); // ---------------------------------------------------------------------- export default function DialogTopUpLimit({ title, openDialog, setOpenDialog, data, }: MuiDialogProps) { const [isDisabledInput, setIsDisabledInput] = useState(false); const [isDisabledButton, setIsDisabledButton] = useState(true); const [isCheckboxChecked, setIsCheckboxChecked] = useState(false); const [ message, setMessage ] = useState (''); const { corporateValue } = useContext(UserCurrentCorporateContext); const TopUpSchema = Yup.object().shape({ topup: Yup.number().max( data?.maxTopUp, `Maximum top-up amount is ${fCurrency(data?.maxTopUp)}` ), }); const defaultValues = { topup: 0, }; const methods = useForm({ resolver: yupResolver(TopUpSchema), // @ts-ignore defaultValues, }); const { setValue, reset, handleSubmit, formState: { errors, isSubmitting }, } = methods; useEffect(() => { if (openDialog === false) { setIsDisabledInput(false); setIsDisabledButton(true); setIsCheckboxChecked(false); reset(); } }, [openDialog, reset]); const onSubmit = async (data: FormValuesProps) => { await new Promise((resolve) => setTimeout(resolve, 500)); setIsDisabledInput(false); setIsDisabledButton(true); setIsCheckboxChecked(false); try { // Send the HTTP POST request to the backend await axios.post(corporateValue + '/topup', { topup: data.topup, }); // Show a success notification enqueueSnackbar('The request has been sent', { variant: 'success' }); setOpenDialog(false); reset(); } catch (error) { // Show an error notification enqueueSnackbar('An error occurred', { variant: 'error' }); setOpenDialog(false); } }; const onCheckHandler = (value: string) => { setIsDisabledInput(!isDisabledInput); value === '0' || value === '' ? setIsDisabledButton(true) : setIsDisabledButton(false); setIsCheckboxChecked(!isCheckboxChecked); // @ts-ignore setValue('topup', data.maxTopUp.toString()); }; const onTopupHandler = (value: string) => { //console.log(!!errors); let newValue; if (value.startsWith('0')) { newValue = '0'; } else { newValue = value; } newValue === '0' || newValue === '' ? setIsDisabledButton(true) : setIsDisabledButton(false); setValue('topup', newValue); }; const getContent = () => ( Company Name {data ? data.companyName : ''} Policy Number {data ? data.policyNumber : 0} Total Member {data ? data.totalMembers : 0} Person Total Cases {data ? data.totalCases : 0} Cases Company Pooled Fund {fCurrency(data ? data.myLimit.balance : 0)} / {data ? data.myLimit.total : 0} {data ? data.myLimit.percentage : 0}% Top Up Limit onTopupHandler(e.target.value)} error={!!errors.topup} helperText={errors.topup?.message} /> onCheckHandler(e.target.value)} /> } label={'Max ' + fCurrency(data ? data.maxTopUp : 0)} /> Ajukan Permintaan ); return ( ); }