From 75cb9bfc88561261367aebf6f906a7698578000c Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 21 May 2026 19:25:27 +0200 Subject: [PATCH] Fix: Neuigkeiten-Ladestate mit try/catch abgesichert --- app/src/routes/(app)/neuigkeiten/+page.svelte | 70 ++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/app/src/routes/(app)/neuigkeiten/+page.svelte b/app/src/routes/(app)/neuigkeiten/+page.svelte index 4591d55..e5df778 100644 --- a/app/src/routes/(app)/neuigkeiten/+page.svelte +++ b/app/src/routes/(app)/neuigkeiten/+page.svelte @@ -24,45 +24,49 @@ let formError = $state(''); // Lightbox - let lightboxUrl = $state(''); + let lightboxUrl = $state(''); + let ladeError = $state(''); onMount(async () => { const vid = pb.authStore.record?.verein_id as string; - const now = new Date().toISOString(); + try { + // Queries einzeln damit ein Fehler sichtbar wird + const [nList, gList] = await Promise.all([ + pb.collection('neuigkeiten').getFullList({ + sort: '-created', expand: 'autor_id', + }), + pb.collection('gruppen').getFullList({ sort: 'name' }), + ]); + neuigkeiten = nList; + gruppen = gList; - const [nList, gList, tList, rList, meineList] = await Promise.all([ - pb.collection('neuigkeiten').getFullList({ - sort: '-created', expand: 'autor_id', - }), - pb.collection('gruppen').getFullList({ sort: 'name' }), - pb.collection('termine').getFullList({ - filter: `beginn >= "${new Date(Date.now() - 30*24*60*60*1000).toISOString()}"`, - sort: '-beginn', - }), - pb.collection('reaktionen').getFullList({ - filter: `beitrag_id.verein_id = "${vid}"`, - }), - pb.collection('reaktionen').getFullList({ - filter: `user_id = "${userId()}"`, - }), - ]); + // Termine der letzten 30 Tage + zukünftige + try { + const von = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().replace('T', ' '); + termine = await pb.collection('termine').getFullList({ + filter: `beginn >= '${von}'`, sort: '-beginn', + }); + } catch { termine = []; } - neuigkeiten = nList; - gruppen = gList; - termine = tList; + // Reaktionen – separat damit Fehler nicht alles blockiert + try { + const [rList, meineList] = await Promise.all([ + pb.collection('reaktionen').getFullList({ filter: `beitrag_id.verein_id = "${vid}"` }), + pb.collection('reaktionen').getFullList({ filter: `user_id = "${userId()}"` }), + ]); + const counts: Record = {}; + for (const r of rList) counts[r.beitrag_id] = (counts[r.beitrag_id] ?? 0) + 1; + reaktionen = counts; + const mine: Record = {}; + for (const r of meineList) mine[r.beitrag_id] = r.id; + meineReaktion = mine; + } catch { /* keine Reaktionen = kein Problem */ } - // Reaktionen zählen - const counts: Record = {}; - for (const r of rList) { - counts[r.beitrag_id] = (counts[r.beitrag_id] ?? 0) + 1; + } catch (e: unknown) { + ladeError = e instanceof Error ? e.message : 'Ladefehler'; + } finally { + loading = false; } - reaktionen = counts; - - const mine: Record = {}; - for (const r of meineList) mine[r.beitrag_id] = r.id; - meineReaktion = mine; - - loading = false; }); function handleDateiAuswahl(e: Event) { @@ -176,6 +180,8 @@ {#if loading}

Laden…

+{:else if ladeError} +

{ladeError}

{:else if neuigkeiten.length === 0}

Noch keine Beiträge – schreib den ersten!

{:else}