diff --git a/package.json b/package.json index 15052c3c..bacd2e6e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.75.2", + "version": "1.75.3", "private": true, "type": "module", "scripts": { diff --git a/src/lib/components/hikes/HikesFilterBar.svelte b/src/lib/components/hikes/HikesFilterBar.svelte index 0aebba3c..daefcb36 100644 --- a/src/lib/components/hikes/HikesFilterBar.svelte +++ b/src/lib/components/hikes/HikesFilterBar.svelte @@ -9,6 +9,7 @@ maxLossM: number; difficulties: SvelteSet; regions: SvelteSet; + tags: SvelteSet; }; interface Props { @@ -37,6 +38,22 @@ return out.sort((a, b) => a.localeCompare(b)); }); + // Tags sorted by usage frequency (most-used first), alphabetical for + // ties. Frequency ordering surfaces broadly-applicable filters like + // "winter" or "easy" at the head of the list, where they're most + // useful for narrowing the listing. + const tags = $derived.by(() => { + const counts = new Map(); + for (const h of hikes) { + for (const t of h.tags ?? []) { + counts.set(t, (counts.get(t) ?? 0) + 1); + } + } + return [...counts.entries()] + .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])) + .map(([t]) => t); + }); + function toggleDifficulty(d: Difficulty) { if (filter.difficulties.has(d)) filter.difficulties.delete(d); else filter.difficulties.add(d); @@ -47,6 +64,11 @@ else filter.regions.add(r); } + function toggleTag(t: string) { + if (filter.tags.has(t)) filter.tags.delete(t); + else filter.tags.add(t); + } + function resetFilters() { filter.maxDistanceKm = maxDistance; filter.maxDurationMin = maxDuration; @@ -54,6 +76,7 @@ filter.maxLossM = maxLoss; filter.difficulties.clear(); filter.regions.clear(); + filter.tags.clear(); } @@ -149,6 +172,24 @@ + + {#if tags.length > 0} +
+ Schlagwörter +
+ {#each tags as t (t)} + + {/each} +
+
+ {/if} diff --git a/src/routes/hikes/+page.svelte b/src/routes/hikes/+page.svelte index cb28defd..5f12bc41 100644 --- a/src/routes/hikes/+page.svelte +++ b/src/routes/hikes/+page.svelte @@ -1,5 +1,6 @@