From cbcdc2a40115388c08d5aa08d969bfa8ab9af9fe Mon Sep 17 00:00:00 2001 From: bender Date: Wed, 11 Mar 2026 20:35:43 +0000 Subject: [PATCH] Add src/app/recipes/page.tsx --- src/app/recipes/page.tsx | 369 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 src/app/recipes/page.tsx diff --git a/src/app/recipes/page.tsx b/src/app/recipes/page.tsx new file mode 100644 index 0000000..14ec0f9 --- /dev/null +++ b/src/app/recipes/page.tsx @@ -0,0 +1,369 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered'; +import FooterBase from '@/components/sections/footer/FooterBase'; +import { Filter, ChefHat, Flame, Zap, Clock, Users } from 'lucide-react'; + +interface Recipe { + id: string; + name: string; + goal: 'weight-loss' | 'muscle-gain'; + calories: number; + protein: number; + carbs: number; + fat: number; + prepTime: number; + difficulty: 'easy' | 'medium' | 'hard'; + ingredients: string[]; + instructions: string[]; + imageUrl?: string; +} + +const recipeDatabase: Recipe[] = [ + { + id: '1', + name: 'Peito de Frango Grelhado com Brócolis', + goal: 'muscle-gain', + calories: 450, + protein: 45, + carbs: 35, + fat: 12, + prepTime: 25, + difficulty: 'easy', + ingredients: ['Peito de frango 200g', 'Brócolis 200g', 'Azeite 1 colher', 'Sal e pimenta'], + instructions: ['Tempere o frango', 'Grelhe em fogo alto 8 minutos cada lado', 'Cozinhe o brócolis no vapor', 'Sirva quente'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '2', + name: 'Salada Verde com Proteína', + goal: 'weight-loss', + calories: 280, + protein: 30, + carbs: 15, + fat: 8, + prepTime: 15, + difficulty: 'easy', + ingredients: ['Alface 200g', 'Peito de frango 150g', 'Cenoura 50g', 'Limão 1', 'Azeite 1 colher'], + instructions: ['Lave as folhas de alface', 'Corte a cenoura em palitos', 'Desfihe o frango cozido', 'Misture e tempere com limão e azeite'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '3', + name: 'Omelete de Claras com Vegetais', + goal: 'weight-loss', + calories: 200, + protein: 25, + carbs: 10, + fat: 5, + prepTime: 10, + difficulty: 'easy', + ingredients: ['Claras de ovo 5', 'Espinafre 100g', 'Tomate 100g', 'Sal e pimenta'], + instructions: ['Bata as claras com sal', 'Aqueça a frigideira com spray', 'Coloque os vegetais', 'Despeje as claras e cozinhe até firmar'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '4', + name: 'Arroz Integral com Frango e Feijão', + goal: 'muscle-gain', + calories: 580, + protein: 40, + carbs: 65, + fat: 10, + prepTime: 40, + difficulty: 'medium', + ingredients: ['Arroz integral 1 xícara cozido', 'Frango 200g', 'Feijão 100g', 'Cebola e alho'], + instructions: ['Cozinhe o arroz integral', 'Refogue cebola e alho', 'Adicione o frango cortado', 'Misture com o feijão', 'Finalize com o arroz'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '5', + name: 'Salmão ao Forno com Abóbora', + goal: 'muscle-gain', + calories: 520, + protein: 42, + carbs: 40, + fat: 15, + prepTime: 35, + difficulty: 'medium', + ingredients: ['Salmão 200g', 'Abóbora 300g', 'Alecrim', 'Azeite', 'Limão'], + instructions: ['Tempere o salmão com limão', 'Corte a abóbora em cubos', 'Coloque em assadeira', 'Asse a 200°C por 25 minutos'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '6', + name: 'Batida de Proteína com Frutas', + goal: 'muscle-gain', + calories: 350, + protein: 35, + carbs: 40, + fat: 3, + prepTime: 5, + difficulty: 'easy', + ingredients: ['Whey protein 30g', 'Banana 1', 'Maçã 1', 'Leite desnatado 200ml'], + instructions: ['Bata tudo no liquidificador', 'Sirva imediatamente'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '7', + name: 'Sopa de Legumes com Caldo de Galinha', + goal: 'weight-loss', + calories: 150, + protein: 15, + carbs: 18, + fat: 2, + prepTime: 30, + difficulty: 'easy', + ingredients: ['Caldo de galinha 500ml', 'Cenoura 100g', 'Abobrinha 100g', 'Brócolis 100g', 'Sal'], + instructions: ['Aqueça o caldo', 'Corte os legumes em pequenos cubos', 'Cozinhe até ficarem macios', 'Tempere e sirva'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + }, + { + id: '8', + name: 'Iogurte Grego com Granola', + goal: 'muscle-gain', + calories: 320, + protein: 28, + carbs: 35, + fat: 8, + prepTime: 2, + difficulty: 'easy', + ingredients: ['Iogurte grego 200g', 'Granola 50g', 'Mel 1 colher', 'Morango fresco'], + instructions: ['Coloque o iogurte na tigela', 'Adicione a granola', 'Regue com mel', 'Complete com morangos'], + imageUrl: 'https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AoRNSPr0mCBj85JKsHl7qxTHsl/nutrition-dashboard-showing-meal-plans-d-1773256981349-9348b6d9.png' + } +]; + +export default function RecipesPage() { + const [selectedGoal, setSelectedGoal] = useState<'weight-loss' | 'muscle-gain' | null>(null); + const [userGoal, setUserGoal] = useState<'weight-loss' | 'muscle-gain' | null>(null); + const [isLoggedIn, setIsLoggedIn] = useState(false); + + useEffect(() => { + // Simulate checking login status from localStorage or auth context + const storedGoal = localStorage.getItem('userFitnessGoal'); + const loggedIn = localStorage.getItem('isLoggedIn') === 'true'; + + if (storedGoal) { + setUserGoal(storedGoal as 'weight-loss' | 'muscle-gain'); + } + setIsLoggedIn(loggedIn); + }, []); + + const filteredRecipes = selectedGoal || userGoal + ? recipeDatabase.filter(recipe => recipe.goal === (selectedGoal || userGoal)) + : recipeDatabase; + + const handleGoalChange = (goal: 'weight-loss' | 'muscle-gain' | null) => { + setSelectedGoal(goal); + }; + + return ( + + + +
+
+ {/* Header */} +
+

+ + Receituário Personalizado +

+

+ {isLoggedIn && userGoal + ? `Suas receitas estão personalizadas para ${userGoal === 'weight-loss' ? 'perda de peso' : 'ganho de massa'}` + : 'Filtre receitas por seu objetivo de fitness'} +

+
+ + {/* Filter Section */} +
+
+ +

Filtrar por Objetivo

+
+
+ + + +
+
+ + {/* Recipes Grid */} +
+ {filteredRecipes.map((recipe) => ( +
+ {/* Image */} + {recipe.imageUrl && ( +
+ {recipe.name} +
+ )} + + {/* Content */} +
+

{recipe.name}

+ + {/* Macros */} +
+
+
{recipe.calories}
+
kcal
+
+
+
{recipe.protein}g
+
Proteína
+
+
+
{recipe.carbs}g
+
Carbs
+
+
+
{recipe.fat}g
+
Gordura
+
+
+ + {/* Info */} +
+
+ + {recipe.prepTime}min +
+
+ + {recipe.difficulty === 'easy' ? 'Fácil' : recipe.difficulty === 'medium' ? 'Médio' : 'Difícil'} +
+
+ + {/* Ingredients Summary */} +
+

Ingredientes:

+
    + {recipe.ingredients.slice(0, 3).map((ingredient, idx) => ( +
  • + + {ingredient} +
  • + ))} + {recipe.ingredients.length > 3 && ( +
  • +{recipe.ingredients.length - 3} mais
  • + )} +
+
+ + {/* Button */} + +
+
+ ))} +
+ + {filteredRecipes.length === 0 && ( +
+ +

Nenhuma receita encontrada para este filtro.

+
+ )} +
+
+ + +
+ ); +}