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 { 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(); const response = await PutData(`${API_URL}/reward/update/${selectedReward}`, 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) => { 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(() => { // console.log('Selected Reward:', selectedReward); if (selectedReward) { doFetchData(selectedReward); } }, [selectedReward]); useEffect(() => { if (showEditDialog) { setFormField({ ...formField, updated_by: parsedUser.username, updated_at: formattedTime }); } }, [formattedTime]); 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 })} />
{ const value = parseFloat(e.target.value); setFormField({ ...formField, amount: isNaN(value) ? 0 : value }); }} />
); }; export default EditDialog;