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('');
// 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<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([
pb.collection('neuigkeiten').getFullList<Neuigkeit>({
sort: '-created', expand: 'autor_id',
}),
pb.collection('gruppen').getFullList<Gruppe>({ sort: 'name' }),
pb.collection('termine').getFullList<Termin>({
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<Termin>({
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<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
const counts: Record<string, number> = {};
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<string, string> = {};
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}
<p class="hint">Laden…</p>
{:else if ladeError}
<p class="hint" style="color:#dc2626">{ladeError}</p>
{:else if neuigkeiten.length === 0}
<p class="hint">Noch keine Beiträge schreib den ersten!</p>
{:else}