fix: 4 Bugs behoben — Dark-Mode Inputs, Essensplan, Dashboard-Refresh, Mengenfeld
1. Dark Mode: .form-input hatte kein Styling, Browser-Default führte zu weißem Text auf weißem Hintergrund. Jetzt mit .input zusammengefasst. 2. Essensplan: DATE_RE fehlte im Import (ReferenceError), db.transaction() wurde doppelt aufgerufen (3 Stellen). 3. Dashboard: Router-Guard verhinderte Re-Render bei Rücknavigation, Widgets zeigten veraltete Daten. 4. Einkaufsliste: Mengenfeld hatte abweichende Hintergrundfarbe und überdimensionierte min-height. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -60,7 +60,6 @@ async function navigate(path, userOrPushState = true, pushState = true) {
|
|||||||
pushState = userOrPushState;
|
pushState = userOrPushState;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path === currentPath) return;
|
|
||||||
currentPath = path;
|
currentPath = path;
|
||||||
|
|
||||||
const route = ROUTES.find((r) => r.path === path) ?? ROUTES.find((r) => r.path === '/');
|
const route = ROUTES.find((r) => r.path === path) ?? ROUTES.find((r) => r.path === '/');
|
||||||
|
|||||||
@@ -805,7 +805,8 @@
|
|||||||
/* --------------------------------------------------------
|
/* --------------------------------------------------------
|
||||||
* Form-Elemente
|
* Form-Elemente
|
||||||
* -------------------------------------------------------- */
|
* -------------------------------------------------------- */
|
||||||
.input {
|
.input,
|
||||||
|
.form-input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: var(--space-2) var(--space-3);
|
padding: var(--space-2) var(--space-3);
|
||||||
border-radius: var(--radius-sm);
|
border-radius: var(--radius-sm);
|
||||||
@@ -818,19 +819,22 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1024px) {
|
@media (min-width: 1024px) {
|
||||||
.input {
|
.input,
|
||||||
|
.form-input {
|
||||||
min-height: var(--target-md);
|
min-height: var(--target-md);
|
||||||
font-size: var(--text-base);
|
font-size: var(--text-base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.input:focus {
|
.input:focus,
|
||||||
|
.form-input:focus {
|
||||||
outline: none;
|
outline: none;
|
||||||
border-color: var(--color-accent);
|
border-color: var(--color-accent);
|
||||||
box-shadow: 0 0 0 3px var(--color-accent-light);
|
box-shadow: 0 0 0 3px var(--color-accent-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
.input::placeholder {
|
.input::placeholder,
|
||||||
|
.form-input::placeholder {
|
||||||
color: var(--color-text-disabled);
|
color: var(--color-text-disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,11 +178,11 @@
|
|||||||
padding: var(--space-1) var(--space-2);
|
padding: var(--space-1) var(--space-2);
|
||||||
border-radius: var(--radius-xs);
|
border-radius: var(--radius-xs);
|
||||||
border: 1px solid var(--color-border);
|
border: 1px solid var(--color-border);
|
||||||
background-color: var(--color-surface-2);
|
background-color: var(--color-surface);
|
||||||
color: var(--color-text-secondary);
|
color: var(--color-text-primary);
|
||||||
font-size: var(--text-sm);
|
font-size: var(--text-sm);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
min-height: var(--target-lg);
|
min-height: auto;
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const db = require('../db');
|
const db = require('../db');
|
||||||
const { str, oneOf, date, collectErrors, MAX_TITLE, MAX_TEXT, MAX_SHORT } = require('../middleware/validate');
|
const { str, oneOf, date, collectErrors, MAX_TITLE, MAX_TEXT, MAX_SHORT, DATE_RE } = require('../middleware/validate');
|
||||||
|
|
||||||
const VALID_MEAL_TYPES = ['breakfast', 'lunch', 'dinner', 'snack'];
|
const VALID_MEAL_TYPES = ['breakfast', 'lunch', 'dinner', 'snack'];
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ router.post('/', (req, res) => {
|
|||||||
LEFT JOIN users u ON u.id = m.created_by
|
LEFT JOIN users u ON u.id = m.created_by
|
||||||
WHERE m.id = ?
|
WHERE m.id = ?
|
||||||
`).get(mealId);
|
`).get(mealId);
|
||||||
})();
|
});
|
||||||
|
|
||||||
// Zutaten anhängen
|
// Zutaten anhängen
|
||||||
const ings = db.get().prepare(
|
const ings = db.get().prepare(
|
||||||
@@ -403,7 +403,7 @@ router.post('/:id/to-shopping-list', (req, res) => {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
})();
|
});
|
||||||
|
|
||||||
res.json({ data: { transferred } });
|
res.json({ data: { transferred } });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -459,7 +459,7 @@ router.post('/week-to-shopping-list', (req, res) => {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
})();
|
});
|
||||||
|
|
||||||
res.json({ data: { transferred } });
|
res.json({ data: { transferred } });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user