import { apiConfig } from '@/config/api.config'; import { Alert, useDataGrid } from '@/components'; import { useCallApi } from '@/hooks'; import { getAuth } from '@/auth'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import { toast } from 'sonner'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { NumericFormat } from 'react-number-format'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useManageRewardContext } from '../hooks/useManageRewardContext'; const API_URL = apiConfig.service_master_data; const EditDialog = () => { const parentRef = useRef(null); const { showEditDialog, handleEditDialog, selectedReward } = useManageRewardContext(); const { reload } = useDataGrid(); const { PutData, GetData } = useCallApi(); const parsedUser = getAuth()?.user; const [alert, setAlert] = useState({ show: false, message: '' }); const initialState = { name: '', type: '', amount: 0, status: '', updated_by: '', updated_at: '' }; const [formField, setFormField] = useState(initialState); const updated_time = new Date(); const formattedTime = updated_time.toISOString().slice(0, 19).replace('T', ' '); const resetForm = () => { setFormField(initialState); setAlert({ show: false, message: '' }); }; const doUpdateReward = useCallback( async (e: React.FormEvent) => { e.preventDefault(); // console.log('Ini datanya:', selectedReward); const response = await PutData(`${API_URL}/reward/update/${selectedReward?.id}`, formField); if (response?.status) { resetForm(); handleEditDialog(false, null); toast.success('Success Update Reward'); reload(); } else { toast.error('Error Update Reward'); setAlert({ show: true, message: 'Failed to Update Reward. Please try again.' }); } }, [selectedReward, formField] ); const doFetchData = useCallback(async (id: string) => { // console.log('Ini datanya:', id); const response = await GetData(`${API_URL}/reward/getdata/${id}`, { id }); // console.log('API Response:', response); if (response?.status) { setFormField((prev) => ({ ...prev, name: response.data.name, type: response.data.type, amount: response.data.amount, status: response.data.status })); } }, []); // const handleUpdate = (e: React.FormEvent) => { // e.preventDefault(); // if ( // formField.name === '' || // formField.type === '' || // formField.amount === 0 || // formField.status === '' // ) { // setAlert({ show: true, message: 'Please fill in all required fields.' }); // return; // } // doUpdateReward(e); // // console.log(formField); // setAlert({ show: false, message: '' }); // }; useEffect(() => { if (selectedReward) { doFetchData(selectedReward.id.toString()); } }, [selectedReward]); useEffect(() => { if (showEditDialog && selectedReward) { setFormField((prev) => ({ ...prev, updated_by: parsedUser.username, updated_at: formattedTime })); } }, [showEditDialog, selectedReward]); useEffect(() => { if (showEditDialog === false) { resetForm(); } }, [showEditDialog]); return ( handleEditDialog(open, null)}> Reward - Update
{alert.show && {alert.message}}
setFormField((prev) => ({ ...prev, name: e.target.value }))} />
setFormField({ ...formField, type: e.target.value })} />
{ setFormField((prev) => ({ ...prev, amount: values.floatValue || 0 })); }} placeholder="Enter Amount" />
); }; export default EditDialog;