From bc170abcdf3b8b88b92ab3ca21dbbc7b37e6dd7c Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Sat, 10 Jan 2026 17:19:55 +0100 Subject: [PATCH] fix: add category and favorites filters to all recipe pages - Move categories logic into Search component for centralization - Add isLoggedIn prop to SeasonLayout and IconLayout components - Fix FilterPanel CSS to properly handle hidden favorites filter - Fix FavoritesFilter to trigger onToggle when checkbox changes - Update Search effect to track all filter states (category, tags, icon, season, favorites) - Hide favorites filter on favorites page while maintaining proper grid layout - All filters now work consistently across entire site --- src/lib/components/FavoritesFilter.svelte | 11 +++++----- src/lib/components/FilterPanel.svelte | 5 +++-- src/lib/components/IconLayout.svelte | 4 +++- src/lib/components/Search.svelte | 22 +++++++++++-------- src/lib/components/SeasonLayout.svelte | 4 +++- src/lib/js/categories.ts | 9 ++++++++ .../[recipeLang=recipeLang]/+page.svelte | 7 +++--- .../category/[category]/+page.svelte | 2 +- .../favorites/+page.svelte | 2 +- .../icon/[icon]/+page.svelte | 2 +- .../season/+page.svelte | 2 +- .../tag/[tag]/+page.svelte | 2 +- 12 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 src/lib/js/categories.ts diff --git a/src/lib/components/FavoritesFilter.svelte b/src/lib/components/FavoritesFilter.svelte index 23d8f47..55b9d92 100644 --- a/src/lib/components/FavoritesFilter.svelte +++ b/src/lib/components/FavoritesFilter.svelte @@ -14,13 +14,13 @@ let checked = $state(enabled); + // Watch for changes to checked and call onToggle $effect(() => { - checked = enabled; + // Track checked as dependency + const currentChecked = checked; + // Call onToggle whenever checked changes + onToggle(currentChecked); }); - - function handleChange() { - onToggle(checked); - }

{label} {data.category}:

- +
{#each rand_array(filteredRecipes) as recipe} diff --git a/src/routes/[recipeLang=recipeLang]/favorites/+page.svelte b/src/routes/[recipeLang=recipeLang]/favorites/+page.svelte index aa89106..06e961c 100644 --- a/src/routes/[recipeLang=recipeLang]/favorites/+page.svelte +++ b/src/routes/[recipeLang=recipeLang]/favorites/+page.svelte @@ -79,7 +79,7 @@ h1{ {/if}

- + {#if data.error}

{labels.errorLoading} {data.error}

diff --git a/src/routes/[recipeLang=recipeLang]/icon/[icon]/+page.svelte b/src/routes/[recipeLang=recipeLang]/icon/[icon]/+page.svelte index 2edf44d..5bf1caf 100644 --- a/src/routes/[recipeLang=recipeLang]/icon/[icon]/+page.svelte +++ b/src/routes/[recipeLang=recipeLang]/icon/[icon]/+page.svelte @@ -26,7 +26,7 @@ return data.season.filter(r => matchedRecipeIds.has(r._id)); }); - + {#snippet recipesSlot()} {#each rand_array(filteredRecipes) as recipe} diff --git a/src/routes/[recipeLang=recipeLang]/season/+page.svelte b/src/routes/[recipeLang=recipeLang]/season/+page.svelte index a02064b..091c1b1 100644 --- a/src/routes/[recipeLang=recipeLang]/season/+page.svelte +++ b/src/routes/[recipeLang=recipeLang]/season/+page.svelte @@ -34,7 +34,7 @@ }); - + {#snippet recipesSlot()} {#each rand_array(filteredRecipes) as recipe} diff --git a/src/routes/[recipeLang=recipeLang]/tag/[tag]/+page.svelte b/src/routes/[recipeLang=recipeLang]/tag/[tag]/+page.svelte index b6d8c56..238873d 100644 --- a/src/routes/[recipeLang=recipeLang]/tag/[tag]/+page.svelte +++ b/src/routes/[recipeLang=recipeLang]/tag/[tag]/+page.svelte @@ -35,7 +35,7 @@ }

{label} {data.tag}:

- +
{#each rand_array(filteredRecipes) as recipe}