Fix: Neuigkeiten-Ladestate mit try/catch abgesichert

This commit is contained in:
rene 2026-05-21 19:25:27 +02:00
parent 13c6ba73ca
commit 75cb9bfc88

View file

@ -24,45 +24,49 @@
let formError = $state(''); let formError = $state('');
// Lightbox // Lightbox
let lightboxUrl = $state(''); let lightboxUrl = $state('');
let ladeError = $state('');
onMount(async () => { onMount(async () => {
const vid = pb.authStore.record?.verein_id as string; 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<Neuigkeit>({
sort: '-created', expand: 'autor_id',
}),
pb.collection('gruppen').getFullList<Gruppe>({ sort: 'name' }),
]);
neuigkeiten = nList;
gruppen = gList;
const [nList, gList, tList, rList, meineList] = await Promise.all([ // Termine der letzten 30 Tage + zukünftige
pb.collection('neuigkeiten').getFullList<Neuigkeit>({ try {
sort: '-created', expand: 'autor_id', const von = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().replace('T', ' ');
}), termine = await pb.collection('termine').getFullList<Termin>({
pb.collection('gruppen').getFullList<Gruppe>({ sort: 'name' }), filter: `beginn >= '${von}'`, sort: '-beginn',
pb.collection('termine').getFullList<Termin>({ });
filter: `beginn >= "${new Date(Date.now() - 30*24*60*60*1000).toISOString()}"`, } catch { termine = []; }
sort: '-beginn',
}),
pb.collection('reaktionen').getFullList({
filter: `beitrag_id.verein_id = "${vid}"`,
}),
pb.collection('reaktionen').getFullList({
filter: `user_id = "${userId()}"`,
}),
]);
neuigkeiten = nList; // Reaktionen separat damit Fehler nicht alles blockiert
gruppen = gList; try {
termine = tList; 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<string, number> = {};
for (const r of rList) counts[r.beitrag_id] = (counts[r.beitrag_id] ?? 0) + 1;
reaktionen = counts;
const mine: Record<string, string> = {};
for (const r of meineList) mine[r.beitrag_id] = r.id;
meineReaktion = mine;
} catch { /* keine Reaktionen = kein Problem */ }
// Reaktionen zählen } catch (e: unknown) {
const counts: Record<string, number> = {}; ladeError = e instanceof Error ? e.message : 'Ladefehler';
for (const r of rList) { } finally {
counts[r.beitrag_id] = (counts[r.beitrag_id] ?? 0) + 1; loading = false;
} }
reaktionen = counts;
const mine: Record<string, string> = {};
for (const r of meineList) mine[r.beitrag_id] = r.id;
meineReaktion = mine;
loading = false;
}); });
function handleDateiAuswahl(e: Event) { function handleDateiAuswahl(e: Event) {
@ -176,6 +180,8 @@
{#if loading} {#if loading}
<p class="hint">Laden…</p> <p class="hint">Laden…</p>
{:else if ladeError}
<p class="hint" style="color:#dc2626">{ladeError}</p>
{:else if neuigkeiten.length === 0} {:else if neuigkeiten.length === 0}
<p class="hint">Noch keine Beiträge schreib den ersten!</p> <p class="hint">Noch keine Beiträge schreib den ersten!</p>
{:else} {:else}