diff --git a/html/js/office-render.js b/html/js/office-render.js index 7b672aa..19ac2e5 100644 --- a/html/js/office-render.js +++ b/html/js/office-render.js @@ -2626,9 +2626,34 @@ async function boot() { } async function refresh() { + // Issue #94, zweiter Anlauf: der erste Fix (siehe Kommentar unten bei renderOfficeScene()) + // sorgte zwar dafuer, dass der Banner ueberhaupt erscheint, hat aber "API nicht erreichbar" + // faelschlich auch dann gezeigt, wenn loadLiveData() laengst erfolgreich war und erst das + // anschliessende Verarbeiten/Zeichnen der Live-Daten scheiterte - Produktion meldete dann + // trotz per curl nachweislich erreichbarer API weiterhin Unerreichbarkeit. Deshalb jetzt + // zwei getrennte try-Bloecke: nur ein Fehlschlag von loadLiveData() selbst ist ein + // Erreichbarkeitsproblem und darf den Demo-Fallback samt Banner ausloesen. + let data; + try { + data = await loadLiveData(); + } catch (err) { + console.warn("[office] Live-API nicht erreichbar, zeige Demo-Daten.", err); + // setApiBanner() steht in einem eigenen finally: renderOfficeScene() zeichnet bei jedem + // Refresh die komplette Szene neu und kann durch einen Fehler in noch unbekannten + // Datenkombinationen scheitern (siehe Issue #94 - Produktion zeigte trotz nicht + // erreichbarer API keinen Banner). Ohne das finally wuerde ein solcher Fehler die + // wichtigere Meldung "API nicht erreichbar" mit sich reissen, statt sie anzuzeigen. + try { + renderOfficeScene(container); + } finally { + setApiBanner(true); + } + return; + } + + setApiBanner(false); + lastLiveData = data; try { - const data = await loadLiveData(); - lastLiveData = data; if (previousTickets) { const previousById = new Map(previousTickets.map((ticket) => [ticket.id, ticket])); @@ -2684,19 +2709,12 @@ async function boot() { resolvePendingAgentTicketMoves(data.agents); previousTickets = data.tickets; renderLiveScene(data); - setApiBanner(false); } catch (err) { - console.warn("[office] Live-API nicht erreichbar, zeige Demo-Daten.", err); - // setApiBanner() steht in einem eigenen finally: renderOfficeScene() zeichnet bei jedem - // Refresh die komplette Szene neu und kann durch einen Fehler in noch unbekannten - // Datenkombinationen scheitern (siehe Issue #94 - Produktion zeigte trotz nicht - // erreichbarer API keinen Banner). Ohne das finally wuerde ein solcher Fehler die - // wichtigere Meldung "API nicht erreichbar" mit sich reissen, statt sie anzuzeigen. - try { - renderOfficeScene(container); - } finally { - setApiBanner(true); - } + // Die API war erreichbar (loadLiveData() oben ist bereits durchgelaufen) - ein Fehler + // hier ist ein Render-/Verarbeitungsbug, kein Erreichbarkeitsproblem. Der Banner bleibt + // deshalb aus (siehe setApiBanner(false) oben); der naechste Poll-Zyklus versucht es + // erneut, sobald startRealtimeUpdates() ihn ausloest. + console.error("[office] Fehler beim Verarbeiten/Zeichnen der Live-Daten.", err); } }