// disbursement/history-transaction/blocks/DetailTransaction.tsx import { KeenIcon } from '@/components'; import { useTransactionContext } from '../hooks/useTransactionContext'; import { useCallApi } from '@/hooks'; import { apiConfig } from '@/config/api.config'; import { useEffect, useState } from 'react'; import moment from 'moment'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import TransactionLogViewer from './DetailTransactionLog'; const API_URL = apiConfig.service_disbursement; type StatusCode = 'W' | 'O' | 'F' | 'D'; interface StatusInfo { label: string; bg: string; text: string; } const statusMap: Record = { W: { label: 'Waiting Schedule', bg: 'bg-yellow-100', text: 'text-yellow-600' }, O: { label: 'On Process', bg: 'bg-blue-100', text: 'text-blue-600' }, F: { label: 'Fail', bg: 'bg-red-100', text: 'text-red-600' }, D: { label: 'Done', bg: 'bg-green-100', text: 'text-green-600' } }; export const renderStatusBadge = (statusRaw: string | null | undefined) => { const status = statusRaw as StatusCode; const { label, bg, text } = statusMap[status] ?? { label: 'Unknown', bg: 'bg-gray-100', text: 'text-gray-600' }; return ( {label} ); }; const DetailTransaction = () => { const { GetData } = useCallApi(); const { showDetailDialog, setShowDetailDialog, selectedTransactionId, setShowDetailLogDialog, setDetailLogData } = useTransactionContext(); const [transactionDetails, setTransactionDetails] = useState(null); const [isLoading, setIsLoading] = useState(false); useEffect(() => { const fetchTransactionDetails = async () => { setIsLoading(true); if (selectedTransactionId) { try { const response = await GetData( `${API_URL}/transaction/history/${selectedTransactionId}`, { id: selectedTransactionId } ); // console.log(response?.data); setTransactionDetails(response?.data); } catch (error) { console.error('Error fetching transaction', error); } finally { setIsLoading(false); } } }; if (showDetailDialog && selectedTransactionId) { fetchTransactionDetails(); } }, [showDetailDialog, selectedTransactionId, GetData]); const [activeTab, setActiveTab] = useState('detail'); // 'detail', 'log', 'approve' const resetForm = () => { setTransactionDetails(null); }; useEffect(() => { if (!showDetailDialog) { resetForm(); } }, [showDetailDialog]); return ( Transaction Details {/* Tab Content */}
{isLoading ? (

Loading Logs Details...

) : ( {transactionDetails?.log && transactionDetails.log.length > 0 ? ( transactionDetails.log.map( ( log: { id: number; customer: any; amount: number; remark: string; reference: string; request_date: string; payment_response: string; status: string; }, index: number ) => ( ) ) ) : ( )}
Username Fullname Amount Status Process Date Invoice Number Actions
{log.customer?.username ?? 'Not Found'} {log.customer?.fullname ?? 'Not Found'} {log.amount ?? '-'} {renderStatusBadge(log.status) ?? '-'} {log.request_date && moment(log.request_date).isValid() ? moment(log.request_date).format('DD/MM/YYYY HH:mm:ss') : '-'} {log.reference ?? '-'}
No logs available
)}
); }; export default DetailTransaction;