'use client'; import { useState, useMemo } from 'react'; import RecipesSidebar, { FilterState } from './RecipesSidebar'; import RecipeCard from './RecipeCard'; import type { Recipe } from '@/lib/recipes'; interface RecipesClientProps { recipes: Recipe[]; categories: string[]; tags: string[]; } export default function RecipesClient({ recipes, categories, tags }: RecipesClientProps) { const [filters, setFilters] = useState({ search: '', category: '', selectedTags: [], }); const [sidebarOpen, setSidebarOpen] = useState(false); const filteredRecipes = useMemo(() => { return recipes.filter((recipe) => { if (filters.search) { const searchLower = filters.search.toLowerCase(); const matchesSearch = recipe.title.toLowerCase().includes(searchLower) || recipe.description.toLowerCase().includes(searchLower) || recipe.tags.some((tag) => tag.toLowerCase().includes(searchLower)); if (!matchesSearch) return false; } if (filters.category && recipe.category !== filters.category) { return false; } if (filters.selectedTags.length > 0) { const hasAllTags = filters.selectedTags.every((tag) => recipe.tags.includes(tag)); if (!hasAllTags) return false; } return true; }); }, [recipes, filters]); return (
setSidebarOpen(!sidebarOpen)} />
{filteredRecipes.length === recipes.length ? `Showing all ${recipes.length} recipes` : `Showing ${filteredRecipes.length} of ${recipes.length} recipes`}
{filteredRecipes.length > 0 ? (
{filteredRecipes.map((recipe) => ( ))}
) : (
🔍

No recipes found

Try adjusting your filters or search terms

)}
); }