// src/components/RecipeSuggester.tsx import React, { useState, useCallback } from 'react'; import { suggestRecipe } from '../services/apiClient'; import { logger } from '../services/logger.client'; export const RecipeSuggester: React.FC = () => { const [ingredients, setIngredients] = useState(''); const [suggestion, setSuggestion] = useState(null); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const handleSubmit = useCallback(async (event: React.FormEvent) => { event.preventDefault(); setIsLoading(true); setError(null); setSuggestion(null); const ingredientList = ingredients.split(',').map(item => item.trim()).filter(Boolean); if (ingredientList.length === 0) { setError('Please enter at least one ingredient.'); setIsLoading(false); return; } try { const response = await suggestRecipe(ingredientList); const data = await response.json(); if (!response.ok) { throw new Error(data.message || 'Failed to get suggestion.'); } setSuggestion(data.suggestion); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.'; logger.error({ error: err }, 'Failed to fetch recipe suggestion.'); setError(errorMessage); } finally { setIsLoading(false); } }, [ingredients]); return (

Get a Recipe Suggestion

Enter some ingredients you have, separated by commas.

setIngredients(e.target.value)} placeholder="e.g., chicken, rice, broccoli" disabled={isLoading} className="block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white sm:text-sm p-2 border" />
{error && (
{error}
)} {suggestion && (
Recipe Suggestion

{suggestion}

)}
); };