Untitled
unknown
plain_text
2 years ago
4.4 kB
6
Indexable
import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import shareIcon from '../../images/shareIcon.svg'; // req33 interface RecipeType { strMeal: string; strDrink: string; strMealThumb: string; strDrinkThumb: string; strCategory: string; strAlcoholic: string; strInstructions: string; strYoutube: string; } function RecipeDetails(props: any) { const [mealsRecomendation, setMealsRecomendation] = useState(); const [linkCopied, setLinkCopied] = useState(false); // req33 useEffect(() => { fetch('https://www.themealdb.com/api/json/v1/1/search.php?s=') .then((response) => { if (response.ok) { return response.json(); } throw new Error('Erro ao buscar as refeições.'); }) .then((data) => { setMealsRecomendation(data.meals); // Atualiza o estado com os dados recebidos }) .catch((error) => { console.error('.Erro ao buscar as refeições:', error); }); }, []); console.log(mealsRecomendation); const [drinksRecomendations, setDrinksRecomendation] = useState(); useEffect(() => { fetch('https://www.thecocktaildb.com/api/json/v1/1/search.php?s=') .then((response) => { if (response.ok) { return response.json(); } throw new Error('Erro ao buscar as refeições'); }) .then((data) => { setDrinksRecomendation(data.drinks); // Atualiza o estado com os dados recebidos }) .catch((error) => { console.error('Erro ao buscar as refeições:', error); }); }, []); console.log(drinksRecomendations); const { tipo } = props; const { id } = useParams<string>(); const path = tipo === 'meals' ? 'themealdb' : 'thecocktaildb'; const [recipes, setRecipes] = useState<RecipeType[]>([]); const paragraphs = Array.from({ length: 20 }, (_, index) => index + 1); useEffect(() => { fetch(`https://www.${path}.com/api/json/v1/1/lookup.php?i=${id}`) .then((response) => { if (response.ok) { return response.json(); } throw new Error('Erro ao buscar as refeições'); }) .then((data) => { setRecipes(data.meals || data.drinks); // Atualiza o estado com os dados recebidos }) .catch((error) => { console.error('Erro ao buscar as refeições:', error); }); }, [id, path]); console.log(recipes); const handleShare = () => { // req33 navigator.clipboard.writeText(window.location.href); setLinkCopied(true); }; return ( <div> {recipes && recipes.length > 0 ? ( recipes.map((recipe, index) => ( <div key={ index }> <h1 data-testid="recipe-title">{recipe.strMeal || recipe.strDrink}</h1> <img src={ tipo === 'meals' ? recipe.strMealThumb : recipe.strDrinkThumb } alt="" data-testid="recipe-photo" /> <p data-testid="recipe-category"> {recipe.strCategory} {recipe.strAlcoholic} </p> <div> {paragraphs.map((index1) => { const ingredientKey = `strIngredient${index1}` as keyof RecipeType; const measureKey = `strMeasure${index1}` as keyof RecipeType; return ( <p key={ index1 } data-testid={ `${index1 - 1}-ingredient-name-and-measure` } > {recipe[ingredientKey]} <br /> {recipe[measureKey]} </p> ); })} </div> <p data-testid="instructions">{recipe.strInstructions}</p> <p data-testid="video">{recipe.strYoutube}</p> </div> )) ) : ''} <button data-testid="start-recipe-btn" style={ { position: 'fixed', bottom: 0 } } > Start Recipe </button> <button data-testid="start-recipe-btn"> Continue Recipe </button> {/* req33 abaixo */} <button data-testid="share-btn" onClick={ handleShare }> <img src={ shareIcon } alt="Share" /> </button> {linkCopied && <h3>Link copied!</h3>} <button data-testid="favorite-btn"> Favorite </button> </div> ); } export default RecipeDetails;
Editor is loading...