import React, { useState } from 'react'; import { Plus, Edit, Trash2, Search, Filter } from 'lucide-react'; import { useTransactions } from '../hooks/useTransactions'; import { TransactionForm } from './TransactionForm'; import { Transaction } from '../types'; export const Transactions: React.FC = () => { const { transactions, categories, createTransaction, updateTransaction, deleteTransaction, loading } = useTransactions(); const [showForm, setShowForm] = useState(false); const [editingTransaction, setEditingTransaction] = useState(); const [searchTerm, setSearchTerm] = useState(''); const [filterType, setFilterType] = useState<'all' | 'income' | 'expense' | 'transfer'>('all'); const filteredTransactions = transactions.filter(transaction => { const matchesSearch = transaction.description.toLowerCase().includes(searchTerm.toLowerCase()) || transaction.category?.name.toLowerCase().includes(searchTerm.toLowerCase()); const matchesType = filterType === 'all' || transaction.type === filterType; return matchesSearch && matchesType; }); const handleSubmit = async (data: any) => { if (editingTransaction) { await updateTransaction(editingTransaction.id, data); } else { await createTransaction(data); } setShowForm(false); setEditingTransaction(undefined); }; const handleEdit = (transaction: Transaction) => { setEditingTransaction(transaction); setShowForm(true); }; const handleDelete = async (id: string) => { if (window.confirm('Are you sure you want to delete this transaction?')) { await deleteTransaction(id); } }; const handleCloseForm = () => { setShowForm(false); setEditingTransaction(undefined); }; if (loading) { return (
{[...Array(5)].map((_, i) => (
))}
); } return (

Transactions

{/* Search and Filter */}
setSearchTerm(e.target.value)} className="pl-10 pr-4 py-2 w-full border border-gray-300 rounded-md focus:ring-blue-500 focus:border-blue-500" />
{/* Transactions List */}
{filteredTransactions.length > 0 ? (
{filteredTransactions.map((transaction) => (
{transaction.category?.name.charAt(0).toUpperCase() || 'T'}

{transaction.description}

{transaction.category?.name} {new Date(transaction.date).toLocaleDateString()} {transaction.type}
{transaction.type === 'income' ? '+' : '-'}${transaction.amount.toFixed(2)}
))}
) : (

No transactions found

{searchTerm || filterType !== 'all' ? 'Try adjusting your search or filter criteria.' : 'Get started by adding your first transaction.' }

{!searchTerm && filterType === 'all' && ( )}
)}
{/* Transaction Form Modal */} {showForm && ( )}
); };