Fix: Neuigkeiten-Ladestate mit try/catch abgesichert
This commit is contained in:
parent
13c6ba73ca
commit
75cb9bfc88
1 changed files with 38 additions and 32 deletions
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue