import { LucideSend, LucideUploadCloud, LucideArrowUpRight, LucideArrowDownLeft, } from "lucide-react-native"; import React from "react"; import { View, Text, TouchableOpacity } from "react-native"; import { useTranslation } from "react-i18next"; import { Transaction } from "~/lib/services/transactionService"; interface TransactionCardProps { transaction: Transaction; onPress?: () => void; } export default function TransactionCard({ transaction, onPress, }: TransactionCardProps) { const { t } = useTranslation(); const formatDate = (date: Date) => { return date.toLocaleDateString("en-US", { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit", }); }; const formatAmount = (amountInCents: number) => { return `$${(amountInCents / 100).toFixed(2)}`; }; const getTransactionIcon = (transaction: Transaction) => { switch (transaction.type) { case "send": return ; case "receive": return ; case "add_cash": return ; case "cash_out": return ; default: return ; } }; const getTransactionColor = (transaction: Transaction) => { switch (transaction.type) { case "send": return "bg-red-500"; case "receive": return "bg-green-500"; case "add_cash": return "bg-blue-500"; case "cash_out": return "bg-orange-500"; default: return "bg-secondary"; } }; const getAmountColor = (transaction: Transaction) => { switch (transaction.type) { case "send": return "text-red-600"; case "receive": return "text-green-600"; case "add_cash": return "text-blue-600"; case "cash_out": return "text-orange-600"; default: return "text-primary"; } }; const getTransactionDescription = (transaction: Transaction) => { switch (transaction.type) { case "send": return t("components.transactioncard.descriptionSend", { recipientName: transaction.recipientName, }); case "receive": return t("components.transactioncard.descriptionReceive", { senderName: transaction.senderName, }); case "add_cash": return t("components.transactioncard.descriptionAddCash", { lastFourDigits: transaction.lastFourDigits, }); case "cash_out": return t("components.transactioncard.descriptionCashOut", { bankProvider: transaction.bankProvider.charAt(0).toUpperCase() + transaction.bankProvider.slice(1), }); default: return t("components.transactioncard.descriptionDefault"); } }; const getTransactionDetails = (transaction: Transaction) => { const details = []; //@ts-ignore if (transaction.note && transaction.note.trim()) { //@ts-ignore details.push(transaction.note); } switch (transaction.type) { case "send": if (transaction.recipientName) { details.push(`Client: ${transaction.recipientName}`); } if (transaction.recipientPhoneNumber) { details.push( t("components.transactioncard.detailPhone", { phoneNumber: transaction.recipientPhoneNumber, }) ); } break; case "receive": if (transaction.senderName) { details.push(`Client: ${transaction.senderName}`); } if (transaction.senderPhoneNumber) { details.push( t("components.transactioncard.detailPhone", { phoneNumber: transaction.senderPhoneNumber, }) ); } break; case "add_cash": if (transaction.cardId) { details.push( t("components.transactioncard.detailCard", { lastFourDigits: transaction.lastFourDigits, }) ); } break; case "cash_out": if (transaction.accountNumber) { details.push( t("components.transactioncard.detailAccount", { accountNumber: transaction.accountNumber, }) ); } details.push( t("components.transactioncard.detailBankProvider", { bankProvider: transaction.bankProvider.charAt(0).toUpperCase() + transaction.bankProvider.slice(1), }) ); break; } return details; }; return ( {getTransactionIcon(transaction)} {getTransactionDescription(transaction)} {formatDate(transaction.createdAt)} {getTransactionDetails(transaction).map((detail, index) => ( {detail} ))} {transaction.type === "send" || transaction.type === "cash_out" ? "-" : "+"} {formatAmount(transaction.amount)} {transaction.status} ); }