feat(app): archiv-seite lokalisiert + nach locale gefiltert
This commit is contained in:
parent
d7510953d2
commit
3411af610e
|
|
@ -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} />
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue