fix: Session-Store, DOM-Timing und API-Pfad-Fehler beheben

- connect-sqlite3 durch eigenen BetterSQLiteStore ersetzt (sessions-Tabelle
  in der bestehenden DB, keine native Kompilierung nötig)
- db.init() vor require('./auth') gezogen damit BetterSQLiteStore-Konstruktor
  db.get() erfolgreich aufrufen kann
- router.js: App-Shell und pageWrapper vor module.render() in DOM einfügen
  damit document.getElementById() in Seiten-Modulen funktioniert
- Seiten-Module (meals, notes, contacts, calendar, budget): _container-Referenz
  eingeführt, alle document.getElementById() auf _container.querySelector() bzw.
  document.querySelector() für body-Elemente umgestellt
- login.js: User-Objekt nach erfolgreichem Login an navigate() übergeben
  damit auth.me()-Roundtrip entfällt
- calendar.js: /users → /auth/users korrigiert (404-Fix)
- SW-Cache v8 (erzwingt Reload aller gecachten Seiten-Module)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ulsklyc
2026-03-25 11:49:10 +01:00
parent 03585662fb
commit 7244fc95f1
11 changed files with 149 additions and 67 deletions
+11 -7
View File
@@ -30,6 +30,9 @@ let state = {
modal: null,
};
// Container-Referenz für Hilfsfunktionen (wird in render() gesetzt)
let _container = null;
// --------------------------------------------------------
// Datumshelfer
// --------------------------------------------------------
@@ -90,6 +93,7 @@ async function loadLists() {
// --------------------------------------------------------
export async function render(container, { user }) {
_container = container;
container.innerHTML = `
<div class="meals-page">
<div class="week-nav">
@@ -123,10 +127,10 @@ export async function render(container, { user }) {
// --------------------------------------------------------
function renderWeekGrid() {
const grid = document.getElementById('week-grid');
const grid = _container.querySelector('#week-grid');
if (!grid) return;
document.getElementById('week-label').textContent =
_container.querySelector('#week-label').textContent =
formatWeekLabel(state.currentWeek);
const days = Array.from({ length: 7 }, (_, i) => addDays(state.currentWeek, i));
@@ -211,17 +215,17 @@ function renderSlot(date, type, mealsForDay) {
// --------------------------------------------------------
function wireNav() {
document.getElementById('week-prev')?.addEventListener('click', async () => {
_container.querySelector('#week-prev')?.addEventListener('click', async () => {
await loadWeek(addDays(state.currentWeek, -7));
renderWeekGrid();
});
document.getElementById('week-next')?.addEventListener('click', async () => {
_container.querySelector('#week-next')?.addEventListener('click', async () => {
await loadWeek(addDays(state.currentWeek, 7));
renderWeekGrid();
});
document.getElementById('week-today')?.addEventListener('click', async () => {
_container.querySelector('#week-today')?.addEventListener('click', async () => {
const monday = getMondayOf(new Date().toISOString().slice(0, 10));
if (monday === state.currentWeek) return;
await loadWeek(monday);
@@ -272,7 +276,7 @@ function wireGrid(grid) {
function openModal(opts) {
state.modal = opts;
document.getElementById('meal-modal-overlay')?.remove();
document.querySelector('#meal-modal-overlay')?.remove();
const overlay = document.createElement('div');
overlay.id = 'meal-modal-overlay';
@@ -465,7 +469,7 @@ function ingredientRowHTML(name, qty, id) {
}
function closeModal() {
document.getElementById('meal-modal-overlay')?.remove();
document.querySelector('#meal-modal-overlay')?.remove();
state.modal = null;
}