import { FontAwesome } from '@expo/vector-icons'; import { Link, useFocusEffect } from 'expo-router'; import { useCallback, useState } from 'react'; import { ScrollView, Text, TouchableOpacity, View } from 'react-native'; import { BarChart } from 'react-native-gifted-charts'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import TransactionList from '../../components/TransactionList'; import { getDB } from '../../db'; import { Transaction } from '../../types'; export default function DashboardScreen() { const insets = useSafeAreaInsets(); const [transactions, setTransactions] = useState([]); const [balance, setBalance] = useState(0); const [income, setIncome] = useState(0); const [expense, setExpense] = useState(0); const [chartData, setChartData] = useState([]); const fetchData = useCallback(async () => { try { const db = getDB(); const result = await db.getAllAsync('SELECT * FROM transactions ORDER BY date DESC'); setTransactions(result); let totalIncome = 0; let totalExpense = 0; const expensesByCategory: Record = {}; result.forEach(t => { if (t.type === 'income') { totalIncome += t.amount; } else { totalExpense += t.amount; expensesByCategory[t.category] = (expensesByCategory[t.category] || 0) + t.amount; } }); setIncome(totalIncome); setExpense(totalExpense); setBalance(totalIncome - totalExpense); // Prepare Chart Data const data = Object.keys(expensesByCategory).map(cat => ({ value: expensesByCategory[cat], label: cat.substring(0, 3), // Short label frontColor: '#EF4444', })); setChartData(data); } catch (error) { console.error('Error fetching data', error); } }, []); useFocusEffect( useCallback(() => { fetchData(); }, [fetchData]) ); return ( {/* Header */} Total Balance €{balance.toFixed(2)} {/* Summary Cards */} Income €{income.toFixed(2)} Expenses €{expense.toFixed(2)} {/* Spending Chart */} {chartData.length > 0 && ( Expenses by Category )} {/* Recent Transactions */} Recent Transactions See All ); }