From 212a8bdb0a901deb6c7b57325db16d0dbcd413b6 Mon Sep 17 00:00:00 2001 From: Ulas Date: Sun, 5 Apr 2026 03:12:01 +0200 Subject: [PATCH] fix(dashboard): filter todayMeals by visible_meal_types preference (#14) The dashboard meal widget was showing all meal types regardless of the household meal visibility settings configured in Settings > Meal Plan. Root cause: the todayMeals SQL query in dashboard.js did not read visible_meal_types from sync_config. The Meals page applied this filter client-side, but the dashboard API returned unfiltered data. Fix: read visible_meal_types from sync_config before the query and inject the active types as IN (?) placeholders. Falls back to all four types when no preference is stored. --- CHANGELOG.md | 5 +++++ package.json | 2 +- server/routes/dashboard.js | 11 +++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8442fe4..5d17085 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.11.1] - 2026-04-05 + +### Fixed +- Fix dashboard meal widget ignoring meal type visibility settings - todayMeals query now reads visible_meal_types from sync_config and filters accordingly, consistent with the Meals page (#14) + ## [0.11.0] - 2026-04-05 ### Added diff --git a/package.json b/package.json index 995511a..c885bd4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "oikos", - "version": "0.11.0", + "version": "0.11.1", "description": "Self-hosted family planner - calendar, tasks, shopping, meal planning, budget and more. Private, open-source, no subscription.", "main": "server/index.js", "type": "module", diff --git a/server/routes/dashboard.js b/server/routes/dashboard.js index b8b912e..8101c9a 100644 --- a/server/routes/dashboard.js +++ b/server/routes/dashboard.js @@ -80,11 +80,18 @@ router.get('/', (req, res) => { result.urgentTasks = []; } - // Heutiges Essen + // Heutiges Essen (gefiltert nach haushaltweiten Mahlzeit-Typ-Einstellungen) try { + const ALL_MEAL_TYPES = ['breakfast', 'lunch', 'dinner', 'snack']; + const prefRow = d.prepare('SELECT value FROM sync_config WHERE key = ?').get('visible_meal_types'); + const visibleTypes = prefRow + ? prefRow.value.split(',').filter((t) => ALL_MEAL_TYPES.includes(t)) + : ALL_MEAL_TYPES; + const placeholders = visibleTypes.map(() => '?').join(', '); result.todayMeals = d.prepare(` SELECT * FROM meals WHERE date = ? + AND meal_type IN (${placeholders}) ORDER BY CASE meal_type WHEN 'breakfast' THEN 0 @@ -92,7 +99,7 @@ router.get('/', (req, res) => { WHEN 'dinner' THEN 2 WHEN 'snack' THEN 3 END - `).all(todayStr); + `).all(todayStr, ...visibleTypes); } catch (err) { log.error('todayMeals-Fehler:', err.message); result.todayMeals = [];