import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import MuiDialog from "@/components/MuiDialog"; import { Checkbox, Typography, FormControl, Card, Grid, DialogActions } from "@mui/material"; import { Paper } from "@mui/material"; import { Stack } from '@mui/material'; import React, { useEffect, useState } from 'react'; import { DetailFinalLogType } from "../Model/Types"; import { BenefitConfigurationListType } from "../Model/Types"; import { InputLabel, Select, FormHelperText } from "@mui/material"; import FormGroup from '@mui/material/FormGroup'; import FormControlLabel from '@mui/material/FormControlLabel'; import Button from '@mui/material/Button'; import { fNumber } from "@/utils/formatNumber"; import palette from "@/theme/palette"; import { Box } from "@mui/material"; import { FormProvider, RHFTextField } from "@/components/hook-form"; import RHFTextFieldMoney from '@/components/hook-form/v2/RHFTextFieldMoney'; import { useFieldArray, useForm } from 'react-hook-form'; import { LoadingButton } from '@mui/lab'; import { postAddBenefit } from '../Model/Functions'; import { useNavigate } from 'react-router'; import { description } from '@/_mock/text'; type DialogConfirmationType = { openDialog: boolean; setOpenDialog: any; onSubmit?: void; requestLog: DetailFinalLogType|undefined; } type BenefitSelected = { id: number, description: string, benefit_id: number, } export default function DialogBenefit({requestLog, setOpenDialog, openDialog } : DialogConfirmationType ) { // Add Benefit const [addBenefit, setAddBenefit] = useState(false) const navigate = useNavigate() //Benefit Name const [valBenefitNames, setValBenefitNames] = useState([]); const [valBenefitNameError, setValBenefitNameError] = useState(''); const benefitNameData = requestLog?.benefit; const [benefitSelected, setBenefitSelected] = useState([]); const handleConditionChangeService = (event) => { const selectedItem = event.target.value; if (valBenefitNames.includes(selectedItem)) { // Item is already selected, remove it setValBenefitNames(valBenefitNames.filter(item => item !== selectedItem)); } else { // Item is not selected, add it setValBenefitNames([...valBenefitNames, selectedItem]); } }; useEffect(() => { const datax: any[] = [] valBenefitNames.map((data) => { benefitNameData?.map((row) => { if(row.id == data) { datax.push(row) } }) }) // for data information let temp = datax.map((item, indx) => { return { benefit_id: item.id, description: item.description, request_log_id: requestLog?.id, amount_incurred: 0, amount_approved: 0, amount_not_approved: 0, excess_paid: 0, keterangan: '', } }) reset({benefit_data: temp}) setBenefitSelected(datax) }, [valBenefitNames]) const handleCloseDialogBenefit = () => { // setOpenDialog(false); setAddBenefit(false) setBenefitSelected([]) setValBenefitNames([]) } const handleAddDialogBenefit = () => { setAddBenefit(true) } const defaultValues: BenefitConfigurationListType = { request_log_id: requestLog?.id, benefit_name: '', amount_incurred: 0, amount_approved: 0, amount_not_approved: 0, excess_paid: 0, }; const validationSchema = Yup.object().shape({ benefit_data: Yup.array().of( Yup.object().shape({ amount_incurred : Yup.number().typeError('').required(''), amount_approved : Yup.number().typeError('').required(''), amount_not_approved : Yup.number().typeError('').required(''), excess_paid : Yup.number().typeError('').required(''), }) ) }) const methods = useForm({ resolver: yupResolver(validationSchema), defaultValues }); const {fields, append, remove} = useFieldArray({name: 'benefit_data',control: methods.control}) const { handleSubmit, reset, watch, setValue, formState: { isDirty, isSubmitting, errors } } = methods; // Submit Form // ===================================== const submitHandler = async (data: BenefitConfigurationListType) => { const response = await postAddBenefit(data); if (response == true) { reset(); // navigate('custormer-service/final-log/detail/'+requestLog?.id); window.location.reload() } } const getContent = () => !addBenefit ? ( Benefit Name* Benefit Name {valBenefitNameError} ) : ( {/* */} {fields?.map((item, index) => ( {item.description} Amount Incurred* Amount Approved* append({amount_approved: ''}) } id='amount_approved' key={item.id} name={`benefit_data.${index}.amount_approved`} placeholder='Amount Approved' required /> Amount Not Approved* append({amount_not_approved: ''}) } id='amount_not_approved' key={item.id} name={`benefit_data.${index}.amount_not_approved`} placeholder='Amount Not Approved' required /> Excess Paid* append({excess_paid: ''}) } id='excess_paid' key={item.id} name={`benefit_data.${index}.excess_paid`} placeholder='Excess Paid' required /> Keterangan* append({keterangan: ''}) } id='keterangan' key={item.id} name={`benefit_data.${index}.keterangan`} placeholder='Keterangan' required /> ))} {/* */} Save ); const getAction = () => !addBenefit ? ( ) : null; return ( ); }