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}