import { useState, useEffect } from "react"; import CookbookRecipeTile from "../components/CookbookRecipeTile.tsx" import { getRecipes, deleteRecipe } from "../services/frontendApi.js"; function Search() { const [searchQuery, setSearchQuery] = useState(""); const [recipes, setRecipes] = useState([]); const [cuisines, setCuisines] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [shouldFetchRecipes, setShouldFetchRecipes] = useState(true); const [selectedCuisine, setSelectedCuisine] = useState(""); useEffect(() => { const loadRecipes = async () => { try { const recipes = await getRecipes(); setRecipes(recipes); console.log(recipes) const uniqueCuisines: [] = Array.from(new Set(recipes.map(recipe => recipe.cuisine))) setCuisines(uniqueCuisines) console.log(cuisines) } catch (error) { console.log(error); setError("Failed to load recipes..."); } finally { setLoading(false); } }; if (shouldFetchRecipes) { loadRecipes().then(() => setShouldFetchRecipes(false)); } }, [shouldFetchRecipes]); const handleDelete = async (id: number | void) => { try { await deleteRecipe(id); setShouldFetchRecipes(true); } catch (error) { console.error("Error deleting recipe:", error); } }; const filteredRecipes = selectedCuisine ? recipes.filter(recipe => recipe.cuisine === selectedCuisine) : recipes; return (
setSearchQuery(e.target.value)} /> {cuisines.map((cuisine) => ( ))}
{error &&
{error}
} {loading ? (
Loading...
) : (
{filteredRecipes.map((recipe) => ( recipe.name.toLowerCase().startsWith(searchQuery) && ))}
)}
); } export default Search