import { useTransactionContext } from '../hooks/useTransactionContext'; import { useCallApi } from '@/hooks'; import { apiConfig } from '@/config/api.config'; import { useEffect, useState } from 'react'; import { Dialog, DialogBody, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; const API_URL = apiConfig.transaction; const DetailTransaction = () => { const { GetData } = useCallApi(); const { showDetailDialog, setShowDetailDialog, selectedTransactionId } = useTransactionContext(); const [transactionDetails, setTransactionDetails] = useState(null); useEffect(() => { const fetchTransactionDetails = async () => { if (selectedTransactionId) { try { const response = await GetData(`${API_URL}/transaction/history/detail/${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 {/* Tabs Navigation */}
{/* Tab Content */}
{activeTab === 'detail' && transactionDetails?.kind === 'P' && (

Transaction Information Info

Transaction Date

{transactionDetails?.transaction_date}

Full Name

{transactionDetails?.origin_customer.fullname}

Amount

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.amount)}

Fee

{transactionDetails?.kind === 'P' ? transactionDetails?.purchase.fee_amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' }) : transactionDetails?.transfer.fee_amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })}

Status

{(() => { let status; if (transactionDetails?.status === 'C') { status = 'COMPLETE'; } else if (transactionDetails?.status === 'F') { status = 'FAILED'; } else if (transactionDetails?.status === 'O') { status = 'ON PROCESS'; } else { status = 'PENDING'; } return status; })()}

Transaction Type

{(() => { let kind; if (transactionDetails?.kind === 'T') { kind = 'TRANSFER'; } else if (transactionDetails?.kind === 'P') { kind = 'PURCHASE'; } else if (transactionDetails?.kind === 'W') { kind = 'WITHDRAW'; } else if (transactionDetails?.kind === 'U') { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; } return kind; })()}

Description

{transactionDetails?.description}

Name

{transactionDetails?.type.name}

Origin Wallet Wallet

Name

{transactionDetails?.origin_wallet.name}

Description

{transactionDetails?.origin_wallet.description}

Purchase Purchase

Amount

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.amount)}

Cashback

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.cashback)}

Cashback Point

{transactionDetails?.purchase.cashback_point}

Fee Amount

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.fee_amount)}

)} {activeTab === 'detail' && transactionDetails?.kind === 'P' && (

Product Information Product Info

Product Name

{transactionDetails?.purchase.product.name}

Price Cash

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.product.price_cash)}

Price Point

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.purchase.product.price_point)}

Product Type

{transactionDetails?.purchase.product.type}

Provider Name

{transactionDetails?.purchase.product.provider.description}

Provider Type

{transactionDetails?.purchase.product.provider.type}

)} {activeTab === 'detail' && transactionDetails?.kind != 'P' && transactionDetails?.transfer != null && (

Transaction Information Info

Transaction Date

{transactionDetails?.transaction_date}

Full Name

{transactionDetails?.origin_customer.fullname}

Amount

{new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(transactionDetails?.transfer.amount)}

Fee

{transactionDetails?.transfer.fee_amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' })}

Status

{(() => { let status; if (transactionDetails?.status === 'C') { status = 'COMPLETE'; } else if (transactionDetails?.status === 'F') { status = 'FAILED'; } else if (transactionDetails?.status === 'O') { status = 'ON PROCESS'; } else { status = 'PENDING'; } return status; })()}

Transaction Type

{(() => { let kind; if (transactionDetails?.kind === 'T') { kind = 'TRANSFER'; } else if (transactionDetails?.kind === 'P') { kind = 'PURCHASE'; } else if (transactionDetails?.kind === 'W') { kind = 'WITHDRAW'; } else if (transactionDetails?.kind === 'U') { kind = 'TOP UP'; } else if (transactionDetails?.kind === 'R') { kind = 'RETURN'; } return kind; })()}

Description

{transactionDetails?.description}

Name

{transactionDetails?.type.name}

Reference

{transactionDetails?.transfer.reference}

Destination Iban

{transactionDetails?.transfer.destination_iban}

Destination Wallet Wallet

Name

{transactionDetails?.transfer.destination_wallet.name}

Description

{transactionDetails?.transfer.destination_wallet.description}

Destination Customer Destination Customer

Name

{transactionDetails?.transfer.destination_customer.fullname}

MSISDN

{transactionDetails?.transfer.destination_customer.msisdn}

Email

{transactionDetails?.transfer.destination_customer.email}

MSISDN

{transactionDetails?.transfer.destination_customer.username}

Origin Wallet Wallet

Name

{transactionDetails?.origin_wallet.name}

Description

{transactionDetails?.origin_wallet.description}

)} {activeTab === 'origincustomer' && (

Origin Customer

Full Name

{transactionDetails?.origin_customer.fullname}

Phone Number

{transactionDetails?.origin_customer.msisdn}

Email

{transactionDetails?.origin_customer.email}

Username

{transactionDetails?.origin_customer.username}

)} {activeTab === 'log' && (

Transaction Logs

{transactionDetails?.log && transactionDetails?.log.length > 0 ? ( transactionDetails.log.map((log: { request_endpoint: string, status: string; request_date: string; response_date: string; request_body: string; response_body: string; response_code: number }, index: number) => ( )) ) : ( )}
Status Request Date Request Body Response Body Response Code Request End Point
{(() => { let status; if (log.status === 'P') { status = 'PENDING'; } else if (log.status === 'O') { status = 'ON PROCESS'; } else if (log.status === 'F') { status = 'FAILED'; } else if (log.status === 'C') { status = 'COMPLETE'; } return status; })()} {log.request_date ?? '-'} {log.response_date ?? '-'} {log.request_body ?? '-'} {log.response_body ?? '-'} {log.request_endpoint ?? '-'}
No logs available
)} {activeTab === 'approve' && (

Approval Logs

{transactionDetails?.log_approve.length === 0 ? (

No data available

) : (
{transactionDetails?.log_approve && transactionDetails?.log_approve.length > 0 ? ( transactionDetails.log_approve.map((log: { created_at: string; status: string; updated_at: string }, index: number) => ( )) ) : ( )}
Status Created At Updated At
{(() => { let status; if (log.status === 'W') { status = 'WAITING'; } else if (log.status === 'Y') { status = 'APPROVE'; } else if (log.status === 'N') { status = 'REJECT'; } else if (log.status === 'T') { status = 'NO NEED'; } return status; })()} {log.created_at} {log.updated_at}
No logs available
)}
)} {activeTab === 'p24' && (

P24 Logs

{transactionDetails?.p24.length === 0 ? (

No data available

) : (
{transactionDetails?.p24 && transactionDetails?.p24.length > 0 ? ( transactionDetails.p24.map((log: { request_endpoint: string, type: string; request_date: string; response_date: string; request_body: string; response_body: string; response_code: number }, index: number) => ( )) ) : ( )}
Type Request Date Request Body Response Body Response Code Request Endpoint
{log.type} {log.request_date} {log.response_date} {log.request_body} {log.response_body} {log.request_endpoint ?? '-'}
No logs available
)}
)}
); }; export default DetailTransaction;