import { FontAwesome } from '@expo/vector-icons'; import { useFocusEffect } from 'expo-router'; import { useCallback, useState } from 'react'; import { ScrollView, Text, View } from 'react-native'; import { PieChart } from 'react-native-gifted-charts'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { getDB } from '../../db'; import { Asset } from '../../types'; export default function InvestmentsScreen() { const insets = useSafeAreaInsets(); const [assets, setAssets] = useState([]); const [totalValue, setTotalValue] = useState(0); const [pieData, setPieData] = useState([]); const fetchData = useCallback(async () => { try { const db = getDB(); const result = await db.getAllAsync('SELECT * FROM assets ORDER BY value DESC'); setAssets(result); const total = result.reduce((acc, asset) => acc + asset.value, 0); setTotalValue(total); // Prepare Pie Data const colors = ['#9333EA', '#C084FC', '#A855F7', '#7E22CE', '#6B21A8']; const data = result.map((asset, index) => ({ value: asset.value, color: colors[index % colors.length], text: `${Math.round((asset.value / total) * 100)}%`, })); setPieData(data); } catch (error) { console.error('Error fetching assets', error); } }, []); useFocusEffect( useCallback(() => { fetchData(); }, [fetchData]) ); const getIconName = (type: string) => { switch (type) { case 'stock': return 'line-chart'; case 'crypto': return 'bitcoin'; case 'real_estate': return 'home'; case 'fund': return 'pie-chart'; default: return 'money'; } }; return ( {/* Header */} Total Portfolio Value €{totalValue.toFixed(2)} {/* Asset Distribution */} Asset Allocation {pieData.length > 0 ? ( ) : ( No assets to display. )} {/* Assets List */} Your Assets {assets.length === 0 ? ( No assets added yet. ) : ( assets.map((item) => ( {item.name} {item.type.replace('_', ' ')} €{item.value.toFixed(2)} {item.quantity && ( {item.quantity} units )} )) )} ); }