/** * RecipeListPage - Displays a list of all recipes with search and filtering */ import { useState } from 'react'; import { Link } from 'react-router-dom'; import { useRecipes } from '../hooks/useRecipes'; import { RecipeCard } from '../components/RecipeCard'; export function RecipeListPage() { const [searchTerm, setSearchTerm] = useState(''); const [searchQuery, setSearchQuery] = useState(''); const { recipes, loading, error, hasMore, loadMore } = useRecipes({ search: searchQuery, limit: 20, }); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); setSearchQuery(searchTerm); }; const handleClearSearch = () => { setSearchTerm(''); setSearchQuery(''); }; return (
{/* Header */}

My Recipes

Browse and search your recipe collection

+ New Recipe
{/* Search Bar */}
setSearchTerm(e.target.value)} className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" /> {searchQuery && ( )}
{searchQuery && (

Searching for: "{searchQuery}"

)}
{/* Error State */} {error && (

Error: {error}

)} {/* Loading State (first load) */} {loading && recipes.length === 0 && (

Loading recipes...

)} {/* Empty State */} {!loading && !error && recipes.length === 0 && (
🍳

{searchQuery ? 'No recipes found' : 'No recipes yet'}

{searchQuery ? 'Try a different search term' : 'Get started by adding your first recipe'}

{!searchQuery && ( Add Your First Recipe )}
)} {/* Recipe Grid */} {recipes.length > 0 && ( <>
{recipes.map((recipe) => ( ))}
{/* Load More Button */} {hasMore && (
)} {/* Results summary */}
Showing {recipes.length} recipe{recipes.length !== 1 ? 's' : ''}
)}
); }