From 873f08042e31fe2a0145d6345e3b6edab182c1ab Mon Sep 17 00:00:00 2001 From: Lars Date: Sat, 21 Mar 2026 08:33:03 +0100 Subject: [PATCH] feat: add date filter to nutrition data tab Added dropdown filter with options: - Letzte 7 Tage - Letzte 30 Tage (default) - Letzte 90 Tage - Letztes Jahr - Alle anzeigen Shows filtered count vs total count in title. Handles large datasets (7+ years) efficiently. Co-Authored-By: Claude Opus 4.6 --- frontend/src/pages/NutritionPage.jsx | 32 +++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/NutritionPage.jsx b/frontend/src/pages/NutritionPage.jsx index 7ab28e9..4a75ee9 100644 --- a/frontend/src/pages/NutritionPage.jsx +++ b/frontend/src/pages/NutritionPage.jsx @@ -24,6 +24,7 @@ function DataTab({ entries, onUpdate }) { const [editValues, setEditValues] = useState({}) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) + const [filter, setFilter] = useState('30') // days to show (7, 30, 90, 'all') const startEdit = (e) => { setEditId(e.id) @@ -72,6 +73,14 @@ function DataTab({ entries, onUpdate }) { } } + // Filter entries by date range + const filteredEntries = filter === 'all' + ? entries + : entries.filter(e => { + const daysDiff = dayjs().diff(dayjs(e.date), 'day') + return daysDiff <= parseInt(filter) + }) + if (entries.length === 0) { return (
@@ -83,17 +92,34 @@ function DataTab({ entries, onUpdate }) { return (
-
Alle Einträge ({entries.length})
+
+
+ Alle Einträge ({filteredEntries.length}{filteredEntries.length !== entries.length ? ` von ${entries.length}` : ''}) +
+ +
{error && (
{error}
)} - {entries.map((e, i) => { + {filteredEntries.map((e, i) => { const isEditing = editId === e.id return (
{!isEditing ? (