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('');
|
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}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue