import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Search, Filter, ChevronDown, Coffee, ShoppingCart, Zap, Home as HomeIcon, Car, Utensils, Briefcase, CreditCard } from 'lucide-react'; import { cn } from '@/lib/utils'; import { Transaction } from '../dashboard/RecentTransactions'; const CATEGORY_ICONS: Record = { food: Utensils, coffee: Coffee, shopping: ShoppingCart, utilities: Zap, housing: HomeIcon, transport: Car, salary: Briefcase, other: CreditCard }; interface TransactionListProps { transactions: Transaction[]; currency?: string; } const TransactionList = ({ transactions, currency = "$" }: TransactionListProps) => { const navigate = useNavigate(); const [searchTerm, setSearchTerm] = useState(''); const [showFilters, setShowFilters] = useState(false); const formatDate = (date: Date) => { return new Intl.DateTimeFormat('en-US', { month: 'short', day: 'numeric' }).format(date); }; const formatCurrency = (amount: number) => { return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', currencyDisplay: 'symbol', }).format(Math.abs(amount)).replace('$', ''); }; const getCategoryIcon = (category: string) => { const IconComponent = CATEGORY_ICONS[category.toLowerCase()] || CreditCard; return ; }; const filteredTransactions = transactions.filter(transaction => transaction.title.toLowerCase().includes(searchTerm.toLowerCase()) ); return (
setSearchTerm(e.target.value)} className="w-full pl-10 pr-4 py-2.5 rounded-lg border border-border focus:border-primary/50 focus:ring-2 focus:ring-primary/20 transition-all bg-card" />
{filteredTransactions.length} transactions
{showFilters && (
)} {filteredTransactions.length > 0 ? (
{filteredTransactions.map((transaction) => (
navigate(`/transactions/${transaction.id}`)} className="flex items-center p-3 bg-card rounded-xl border border-border/60 subtle-shadow transition-all duration-300 hover:card-shadow hover:-translate-y-0.5 cursor-pointer" >
{getCategoryIcon(transaction.category)}

{transaction.title}

{formatDate(transaction.date)}

{transaction.type === "expense" ? "- " : "+ "} {currency}{formatCurrency(transaction.amount)}
))}
) : (

No transactions found

)}
); }; export default TransactionList;