feat(app): archiv-seite lokalisiert + nach locale gefiltert

This commit is contained in:
Jörg Lohrer 2026-04-21 14:08:42 +02:00
parent d7510953d2
commit 3411af610e
1 changed files with 18 additions and 6 deletions

View File

@ -4,6 +4,8 @@
import { loadPostList } from '$lib/nostr/loaders'; import { loadPostList } from '$lib/nostr/loaders';
import PostCard from '$lib/components/PostCard.svelte'; import PostCard from '$lib/components/PostCard.svelte';
import LoadingOrError from '$lib/components/LoadingOrError.svelte'; import LoadingOrError from '$lib/components/LoadingOrError.svelte';
import { t, activeLocale } from '$lib/i18n';
import { get } from 'svelte/store';
let posts: NostrEvent[] = $state([]); let posts: NostrEvent[] = $state([]);
let loading = $state(true); let loading = $state(true);
@ -14,19 +16,29 @@
posts = await loadPostList(); posts = await loadPostList();
loading = false; loading = false;
if (posts.length === 0) { if (posts.length === 0) {
error = 'Keine Posts gefunden auf den abgefragten Relays.'; error = get(t)('home.empty');
} }
} catch (e) { } catch (e) {
loading = false; loading = false;
error = e instanceof Error ? e.message : 'Unbekannter Fehler'; error = e instanceof Error ? e.message : get(t)('post.unknown_error');
} }
}); });
let currentLocale = $state('de');
activeLocale.subscribe((v) => (currentLocale = v));
const filtered = $derived.by(() =>
posts.filter((p) => {
const l = p.tags.find((tag) => tag[0] === 'l')?.[1];
return (l ?? 'de') === currentLocale;
})
);
// Posts nach Jahr gruppieren (neueste zuerst) // Posts nach Jahr gruppieren (neueste zuerst)
type YearGroup = { year: number; posts: NostrEvent[] }; type YearGroup = { year: number; posts: NostrEvent[] };
const groupsByYear = $derived.by<YearGroup[]>(() => { const groupsByYear = $derived.by<YearGroup[]>(() => {
const byYear = new Map<number, NostrEvent[]>(); const byYear = new Map<number, NostrEvent[]>();
for (const p of posts) { for (const p of filtered) {
const ts = Number(p.tags.find((t) => t[0] === 'published_at')?.[1] ?? p.created_at); const ts = Number(p.tags.find((t) => t[0] === 'published_at')?.[1] ?? p.created_at);
const year = new Date(ts * 1000).getUTCFullYear(); const year = new Date(ts * 1000).getUTCFullYear();
if (!byYear.has(year)) byYear.set(year, []); if (!byYear.has(year)) byYear.set(year, []);
@ -39,11 +51,11 @@
</script> </script>
<svelte:head> <svelte:head>
<title>Archiv Jörg Lohrer</title> <title>{$t('archive.doc_title')}</title>
</svelte:head> </svelte:head>
<h1 class="title">Archiv</h1> <h1 class="title">{$t('archive.title')}</h1>
<p class="meta">Alle Beiträge, nach Jahr gruppiert.</p> <p class="meta">{$t('archive.subtitle')}</p>
<LoadingOrError {loading} {error} /> <LoadingOrError {loading} {error} />