Files
homepage/src/routes/[recipeLang=recipeLang]/season/[month]/+page.svelte
Alexander Bocken 8560077759 refactor: reorganize components into domain subfolders and replace relative imports
Move components from flat src/lib/components/ into recipes/, faith/, and
cospend/ subdirectories. Replace ~144 relative imports across API routes
and lib files with $models, $utils, $types, and $lib aliases. Add $types
alias to svelte.config.js. Remove unused EditRecipe.svelte.
2026-02-11 09:49:11 +01:00

51 lines
2.0 KiB
Svelte

<script lang="ts">
import type { PageData } from './$types';
import Recipes from '$lib/components/recipes/Recipes.svelte';
import SeasonLayout from '$lib/components/recipes/SeasonLayout.svelte';
import MediaScroller from '$lib/components/recipes/MediaScroller.svelte';
import Card from '$lib/components/recipes/Card.svelte';
import Search from '$lib/components/recipes/Search.svelte';
let { data } = $props<{ data: PageData }>();
const isEnglish = $derived(data.lang === 'en');
const months = $derived(isEnglish
? ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]);
const siteTitle = $derived(isEnglish ? 'Bocken Recipes' : 'Bocken Rezepte');
const currentMonth = $derived(months[data.month - 1]);
import { rand_array } from '$lib/js/randomize';
// Search state
let matchedRecipeIds = $state(new Set());
let hasActiveSearch = $state(false);
// Handle search results from Search component
function handleSearchResults(ids, categories) {
matchedRecipeIds = ids;
hasActiveSearch = ids.size < data.season.length;
}
// Filter recipes based on search
const filteredRecipes = $derived.by(() => {
if (!hasActiveSearch) {
return data.season;
}
return data.season.filter(r => matchedRecipeIds.has(r._id));
});
</script>
<svelte:head>
<title>{currentMonth} - {siteTitle}</title>
</svelte:head>
<SeasonLayout active_index={data.month -1} {months} routePrefix="/{data.recipeLang}" lang={data.lang} recipes={data.season} onSearchResults={handleSearchResults}>
{#snippet recipesSlot()}
<Recipes>
{#each rand_array(filteredRecipes) as recipe}
<Card {recipe} icon_override=true isFavorite={recipe.isFavorite} showFavoriteIndicator={!!data.session?.user} routePrefix="/{data.recipeLang}"></Card>
{/each}
</Recipes>
{/snippet}
</SeasonLayout>