import { useTransactionContext } from '../hooks/useApprovalTransactionContext'; import { useCallApi } from '@/hooks'; import { apiConfig } from '@/config/api.config'; import { useCallback, useEffect, useState } from 'react'; import { Dialog, DialogBody, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { doSaveLogActivity } from '@/actions/GlobalActions'; import { toast } from 'sonner'; import { Input } from '@/components/ui/input'; import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components'; const API_URL = apiConfig.transaction; const ApprovalDialog = () => { const { GetData, PostData } = useCallApi(); const { reload } = useDataGrid(); const { showApprovalDialog, setShowApprovalDialog, selectedTransactionIdForApproval, } = useTransactionContext(); const [transactionDetails, setTransactionDetails] = useState(null); const [formField, setFormField] = useState({ transaction_code: '', status: '', notes: '', }); const [alert, setAlert] = useState({ show: false, message: '', }); const doApproval = useCallback( async (e: React.FormEvent) => { e.preventDefault(); if (!transactionDetails || !transactionDetails.code) { toast.error('Transaction data not loaded yet.'); return; } if (!formField.status) { toast.error('Please select a status.'); return; } const response = await PostData(`${API_URL}/transaction/set-approval`, { id_transaction: transactionDetails.id, status: formField.status, notes: formField.notes, }); if (response?.status === false) { setAlert({ show: true, message: response?.message?.error?.message || 'Approval failed', }); return; } if (response?.status) { setAlert({ show: false, message: '' }); toast.success('Success Update Approval'); const createActivity = { module: 'Approval Transaction', description: `Change status approve for transaction => ${transactionDetails.code}`, action: 'U', }; doSaveLogActivity(createActivity); setShowApprovalDialog(false); reload(); } else { setAlert({ show: true, message: response?.message }); } }, [formField, transactionDetails] ); useEffect(() => { if (showApprovalDialog) { setFormField({ transaction_code: '', status: '', notes: '', }); setTransactionDetails(null); setAlert({ show: false, message: '' }); } }, [showApprovalDialog]); useEffect(() => { const fetchTransactionDetails = async () => { if (selectedTransactionIdForApproval) { try { const response = await GetData( `${API_URL}/transaction/history/detail/${selectedTransactionIdForApproval}`, { id: selectedTransactionIdForApproval, } ); setTransactionDetails(response?.data); } catch (error) { console.error('Error fetching transaction', error); } } }; if (showApprovalDialog && selectedTransactionIdForApproval) { fetchTransactionDetails(); } }, [showApprovalDialog, selectedTransactionIdForApproval, GetData]); useEffect(() => { if (transactionDetails) { setFormField((prev) => ({ ...prev, transaction_code: transactionDetails.id ?? '', })); } }, [transactionDetails]); return ( Approval Transaction
{formField.status === 'N' && (
setFormField((prev) => ({ ...prev, notes: e.target.value, })) } />
)} {alert.show && (
{alert.message}
)}

); }; export default ApprovalDialog;