// 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); useEffect(() => { const fetchTransactionDetails = async () => { console.log(selectedTransactionId) 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); } } }; if (showDetailDialog && selectedTransactionId) { fetchTransactionDetails(); } }, [showDetailDialog, selectedTransactionId, GetData]); const [activeTab, setActiveTab] = useState('detail'); // 'detail', 'log', 'approve' return ( Transaction Details {/* Tab Content */}
{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 ?? '-'} {log.customer.fullname ?? '-'} {log.amount ?? '-'} {renderStatusBadge(log.status) ?? '-'} {log.request_date && moment(log.request_date).isValid() ? moment(log.request_date).format('YYYY-MM-DD HH:mm:ss') : '-'} {log.reference ?? '-'}
No logs available
); }; export default DetailTransaction;