'use client'; import { useState, useEffect } from 'react'; import AusgabenForm from '@/components/AusgabenForm'; import AusgabenList from '@/components/AusgabenList'; import MonatsStatistik from '@/components/MonatsStatistik'; import LogoutButton from '@/components/LogoutButton'; import { AusgabenEntry } from '@/types/ausgaben'; import packageJson from '@/package.json'; export default function Home() { const [activeTab, setActiveTab] = useState(0); // 0 = Haushalt, 1 = Privat const [entries, setEntries] = useState([]); const [isLoading, setIsLoading] = useState(true); const [selectedEntry, setSelectedEntry] = useState(null); const [statsRefreshKey, setStatsRefreshKey] = useState(0); const version = packageJson.version; const buildDate = process.env.NEXT_PUBLIC_BUILD_DATE || new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); useEffect(() => { fetchRecentEntries(); setSelectedEntry(null); // Clear selected entry when switching tabs }, [activeTab]); const fetchRecentEntries = async () => { setIsLoading(true); try { const response = await fetch(`/api/ausgaben?limit=20&typ=${activeTab}`, { cache: 'no-store', headers: { 'Cache-Control': 'no-cache', }, }); const data = await response.json(); if (data.success) { setEntries(data.data); } } catch (error) { console.error('Error fetching entries:', error); } finally { setIsLoading(false); } }; const handleSuccess = () => { setSelectedEntry(null); setStatsRefreshKey((k) => k + 1); setTimeout(() => { fetchRecentEntries(); }, 100); }; const handleDelete = (id: number) => { setEntries(entries.filter(entry => entry.ID !== id)); setStatsRefreshKey((k) => k + 1); }; const handleEdit = (entry: AusgabenEntry) => { setSelectedEntry(entry); window.scrollTo({ top: 0, behavior: 'smooth' }); }; return (

Ausgaben - Log

{/* Tab Navigation */}

Eingabe

Letzte 20 Einträge

{isLoading ? (
Lade Daten...
) : ( )}
{/* Footer */}
); }