import React, { useMemo } from 'react'; import dayjs from 'dayjs'; import { titleCase } from 'string-ts'; import { FileJson2 } from 'lucide-react'; import { JsonDialog, TextWithNAFallback } from '@ballerine/ui'; import { TTransactionsList } from '@/domains/transactions/fetchers'; import { useEllipsesWithTitle } from '@/common/hooks/useEllipsesWithTitle/useEllipsesWithTitle'; import { CopyToClipboardButton } from '@/common/components/atoms/CopyToClipboardButton/CopyToClipboardButton'; interface IExpandedTransactionDetailsProps { transaction: TTransactionsList[number]; } export const ExpandedTransactionDetails = ({ transaction }: IExpandedTransactionDetailsProps) => { const { ref, styles } = useEllipsesWithTitle(); const transactionAmountAndCurrency = useMemo(() => { try { return new Intl.NumberFormat('en-US', { style: 'currency', currency: transaction.transactionCurrency, }).format(transaction.transactionAmount); } catch { return `${transaction.transactionAmount} ${transaction.transactionCurrency}`; } }, [transaction.transactionAmount, transaction.transactionCurrency]); const transactionBaseAmountAndCurrency = useMemo(() => { try { return new Intl.NumberFormat('en-US', { style: 'currency', currency: transaction.transactionBaseCurrency, }).format(transaction.transactionBaseAmount); } catch { return `${transaction.transactionBaseAmount} ${transaction.transactionBaseCurrency}`; } }, [transaction.transactionBaseAmount, transaction.transactionBaseCurrency]); return (
Transaction ID Transaction Date Transaction Status Transaction Type Transaction Category Amount in Original Currency Amount in Base Currency
{transaction.transactionCorrelationId}
{`${dayjs(transaction.transactionDate).format( 'MMM DD, YYYY', )} ${dayjs(transaction.transactionDate).local().format('hh:mm')}`} {titleCase(transaction.transactionStatus ?? '')} {titleCase(transaction.transactionType ?? '')} {titleCase(transaction.transactionCategory ?? '')} {transactionAmountAndCurrency} {transactionBaseAmountAndCurrency}
Transaction Direction Payment Method Payment Type Payment Channel Originator IP Address Originator Geo Location Card Holder Name
{titleCase(transaction.transactionDirection ?? '')} {titleCase(transaction.paymentMethod ?? '')} {titleCase(transaction.paymentType ?? '')} {titleCase(transaction.paymentChannel ?? '')} {transaction.originatorIpAddress} {transaction.originatorGeoLocation} {transaction.cardHolderName}
Card BIN Card Brand Card Issued Country Completed 3DS Card Type Product Name } dialogButtonText={`View all data`} json={JSON.stringify(transaction, null, 2)} />
{transaction.cardBin ?? ''} {titleCase(transaction.cardBrand ?? '')} {transaction.cardIssuedCountry} {titleCase(transaction.completed3ds ? 'True' : 'False')} {titleCase(transaction.cardType ?? '')} {transaction.productName}  
); };