From 14d106258344382d83fd41eb7601792796dc21e9 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Mon, 27 Apr 2026 19:43:18 +0000 Subject: [PATCH] Fix: Blur greift bei jedem ersten Durchlauf der ausgewaehlten Lage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vorheriger Patch hatte den rAF nur im Create-Flow gesetzt. Damit funktionierte zwar das Anlegen, aber das Auswaehlen einer existierenden Lage, deren erste Recherche gerade laeuft (oder nach einem manuellen ersten Refresh), blieb unblurred. Loesung: rAF mit add("blurred") jetzt zentral in selectIncident, sobald der Progress-State isFirst=true und nicht minimiert ist. Damit greift der Blur in allen Pfaden (Anlegen, manueller Refresh, Auswahl einer laufenden Lage, Wechsel zwischen Faellen, Initial-Load via savedId). Der zusaetzliche rAF in createIncident von 2ee90a4 ist damit redundant und wieder entfernt — der zentrale Hook in selectIncident deckt den Fall mit ab. cache-bust app.js auf v=20260427b. --- src/static/dashboard.html | 2 +- src/static/js/app.js | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/static/dashboard.html b/src/static/dashboard.html index f88d6b0..0ce9484 100644 --- a/src/static/dashboard.html +++ b/src/static/dashboard.html @@ -628,7 +628,7 @@ - + diff --git a/src/static/js/app.js b/src/static/js/app.js index 36936e7..95dcf4e 100644 --- a/src/static/js/app.js +++ b/src/static/js/app.js @@ -736,9 +736,8 @@ const App = { const prevMini = document.getElementById('progress-mini'); if (prevMini) prevMini.style.display = 'none'; const grid = document.querySelector('.tab-panels'); - // Blur nur entfernen, wenn er nicht direkt danach wieder gesetzt wird. - // Beim Create-Flow (frischer isFirst-State + selectIncident im selben - // Tick) greift CSS filter:blur sonst nicht im selben Frame. + // Wenn gerade ein erster Refresh laeuft, Blur stehen lassen statt + // remove+add im selben Tick — CSS filter:blur greift sonst nicht. const _restState = isRefreshing ? UI._progressState[id] : null; const _willReBlur = _restState && _restState.isFirst && !_restState.minimized; if (grid && !_willReBlur) grid.classList.remove('blurred'); @@ -753,6 +752,14 @@ const App = { UI._showPopupProgress(state.step, {}, state); } UI._lockActionsIfFirst(state.isFirst); + // _showPopupProgress setzt .blurred bereits, aber CSS filter + // greift nach dem grossen DOM-Reshuffle (Display-Toggle, + // renderSidebar, leerge innerHTML) im selben Frame nicht + // zuverlaessig. Im naechsten Frame nochmal setzen — + // idempotent, falls schon gesetzt. + if (state.isFirst && grid && !state.minimized) { + requestAnimationFrame(() => grid.classList.add('blurred')); + } } else { // No state yet — show popup (first status update will refine) UI.showProgress('researching', {}, id, false); @@ -1783,14 +1790,6 @@ const App = { await this.selectIncident(incident.id); - // Im Create-Flow greift CSS filter:blur nach dem viel DOM-Reshuffle - // (Modal-Close, renderSidebar, Tab-Wechsel) im selben Frame nicht - // zuverlaessig. Im naechsten Frame nochmal setzen — Aufwand minimal. - requestAnimationFrame(() => { - const _grid = document.querySelector('.tab-panels'); - if (_grid) _grid.classList.add('blurred'); - }); - this._updateRefreshButton(true); await API.refreshIncident(incident.id); UI.showToast(`Lage "${incident.title}" angelegt. Recherche gestartet.`, 'success');