import { QuickAddModal } from "@/src/components/features/transactions/QuickAddModal"; import { SummaryHeader } from "@/src/components/features/transactions/SummaryHeader"; import { TransactionItem } from "@/src/components/features/transactions/TransactionItem"; import { EditTransactionModal } from "@/src/components/features/transactions/EditTransactionModal"; import { useTransactions, useTransactionSummary, useDeleteTransaction, type TransactionWithCategory } from "@/src/hooks/useTransactions"; import { Ionicons } from "@expo/vector-icons"; import { useState } from "react"; import { ActivityIndicator, FlatList, Pressable, RefreshControl, Text, View, } from "react-native"; import { useSafeAreaInsets } from "react-native-safe-area-context"; type FilterType = "all" | "income" | "expense"; export default function TransactionsScreen() { const insets = useSafeAreaInsets(); const [filter, setFilter] = useState("all"); const [showAddModal, setShowAddModal] = useState(false); const [editTransaction, setEditTransaction] = useState(null); const { mutate: deleteTransaction } = useDeleteTransaction(); const transactionFilter = filter === "all" ? undefined : { type: filter as "income" | "expense" }; const { data: transactions = [], isLoading, refetch, isRefetching } = useTransactions(transactionFilter); const { data: summary, isLoading: summaryLoading } = useTransactionSummary(); function renderEmpty() { if (isLoading) return null; return ( Noch keine Buchungen Tippe auf + um deine erste Buchung einzutragen ); } return ( {/* Filter Bar */} {(["all", "expense", "income"] as const).map((f) => ( setFilter(f)} className={`px-4 py-1.5 rounded-full ${filter === f ? "bg-blue-600" : "bg-gray-100"}`} > {f === "all" ? "Alle" : f === "expense" ? "Ausgaben" : "Einnahmen"} ))} {/* Transaction List */} {isLoading ? ( ) : ( item.id} renderItem={({ item }) => ( deleteTransaction(t.id)} /> )} ListEmptyComponent={renderEmpty} refreshControl={ void refetch()} /> } ItemSeparatorComponent={() => } contentContainerStyle={transactions.length === 0 ? { flex: 1 } : undefined} /> )} {/* FAB */} setShowAddModal(true)} className="absolute bottom-6 right-6 w-14 h-14 bg-blue-600 rounded-full items-center justify-center shadow-lg active:opacity-80" > setShowAddModal(false)} onRequestAddCategory={() => {}} /> {editTransaction && ( setEditTransaction(null)} /> )} ); }