diff --git a/LeftOvers/App.tsx b/LeftOvers/App.tsx index d59933d..44a747e 100644 --- a/LeftOvers/App.tsx +++ b/LeftOvers/App.tsx @@ -18,8 +18,8 @@ export default function App() { - }> - + }> + diff --git a/LeftOvers/Services/Recipes/RecipesServices.tsx b/LeftOvers/Services/Recipes/RecipesServices.tsx index c86d71d..e5100ba 100644 --- a/LeftOvers/Services/Recipes/RecipesServices.tsx +++ b/LeftOvers/Services/Recipes/RecipesServices.tsx @@ -18,7 +18,7 @@ export default class RecipesService implements IRecipesService { async getRecipeById(id: number): Promise{ try { const response = await axios.get(`${this.API_URL}/${id}`); - console.log(response); + //console.log(response.name); return response.data as Recipes; } catch (error) { throw new Error('Erreur lors de la récupération des ingrédients : ' + error.message); diff --git a/LeftOvers/navigation/CookingStackScreen.tsx b/LeftOvers/navigation/CookingStackScreen.tsx index bf1f075..669a8b2 100644 --- a/LeftOvers/navigation/CookingStackScreen.tsx +++ b/LeftOvers/navigation/CookingStackScreen.tsx @@ -5,6 +5,8 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack'; import IngredientSelection from '../screens/IngredientSelection'; import { HeaderTitle } from './Utils'; import ThemeContext from '../theme/ThemeContext'; +import RecipeSuggestion from '../screens/RecipeSuggestion'; +import RecipeDetails from '../screens/RecipeDetails'; const CookingStack = createNativeStackNavigator() @@ -23,6 +25,26 @@ export default function CookingStackScreen() { ) }} /> + ( + + ) + }} + /> + ( + + ) + }} + /> ) } diff --git a/LeftOvers/screens/HomePage.tsx b/LeftOvers/screens/HomePage.tsx index 080f88f..73f4e2e 100644 --- a/LeftOvers/screens/HomePage.tsx +++ b/LeftOvers/screens/HomePage.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useState } from 'react'; +import React, { useContext, useState, useEffect } from 'react'; import { StyleSheet, View, Text, Pressable, Image, ScrollView } from 'react-native'; import {LinearGradient} from 'expo-linear-gradient'; import {SafeAreaProvider} from 'react-native-safe-area-context'; @@ -11,17 +11,51 @@ import ColorContext from '../theme/ColorContext'; import bracketLeft from '../assets/images/angle_bracket_left.png'; import bracketRight from '../assets/images/angle_bracket_right.png'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import EventEmitter from './EventEmitter'; export default function HomePage({ navigation, props }) { const {colors} = useContext(ColorContext); - const profiles = [ + const profilesHand = [ {name: "Johnny Silverhand", avatar: "plus_small.png", isActive: "flex"}, {name: "Panam Palmer", avatar: "plus_small.png", isActive: "none"}, {name: "Goro Takemura", avatar: "plus_small.png", isActive: "none"}, {name: "David Martinez", avatar: "plus_small.png", isActive: "flex"}, ] + const [profiles, setProfiles] = useState([{name: "None", avatar: "plus_small.png", isActive: "none"}]); + console.log(profiles, profiles.length) + + const handleGetProfiles = async () => { + try { + const existingProfiles = await AsyncStorage.getItem('profiles'); + return JSON.parse(existingProfiles) || []; + } catch (error) { + console.log(error); + return []; + } + } + + const fetchProfiles = async () => { + const existingProfiles = await handleGetProfiles(); + setProfiles(existingProfiles); + }; + + const subscription = EventEmitter.addListener('profileAdded', async () => { + fetchProfiles(); + }); + + useEffect(() => { + fetchProfiles(); + console.log(profiles.length) + if(profiles.length == 0){ + setProfiles([{name: "None", avatar: "plus_small.png", isActive: "none"}]) + console.log("Je passe ici") + } + console.log(profiles) + }, []); + const ingredientList = [{title: "Carrot"}, {title: "Potato"}, {title: "Peach"}] const [cpt, setCpt] = useState(0); @@ -178,9 +212,9 @@ export default function HomePage({ navigation, props }) { - navigation.navigate('IngredientSelection')}/> + console.log('Chnge Selected Ingredient')}/> - navigation.navigate('RecipeSuggestion')}/> + console.log('Go and search for recipe')}/> diff --git a/LeftOvers/screens/IngredientSelection.tsx b/LeftOvers/screens/IngredientSelection.tsx index b367188..ee7b49a 100644 --- a/LeftOvers/screens/IngredientSelection.tsx +++ b/LeftOvers/screens/IngredientSelection.tsx @@ -3,7 +3,6 @@ import { View, StyleSheet, Text, Image, Pressable, ActivityIndicator, FlatList, import { SafeAreaProvider } from 'react-native-safe-area-context'; import { Searchbar } from 'react-native-paper'; import FoodElementText from '../components/FoodElementText'; - import plus from '../assets/images/plus.png'; import moins from '../assets/images/minus.png'; import Ingredient from '../Models/Ingredient'; @@ -20,7 +19,7 @@ export default function IngredientSelection(props) { const ingredientService = new IngredientService(); const {colors} = useContext(ColorContext); const [availableSize, setAvailableSize] = useState(0); - const [listVisibility, setListVisibility] = useState("none"); + const [listVisibility, setListVisibility] = useState("flex"); const [availableVisibility, setAvailableVisibility] = useState("none"); const [searchQuery, setSearchQuery] = useState(''); @@ -57,6 +56,7 @@ const loadIngredients = async () => { }; useEffect(() => { + console.log("Je passe ici (Ingredient Selection)") loadIngredients(); }, []); diff --git a/LeftOvers/screens/Profiles.tsx b/LeftOvers/screens/Profiles.tsx index e7e0e3c..1f6803a 100644 --- a/LeftOvers/screens/Profiles.tsx +++ b/LeftOvers/screens/Profiles.tsx @@ -49,14 +49,14 @@ export default function Profiles({navigation, props}) { await AsyncStorage.setItem('profiles', JSON.stringify(updatedProfiles)); fetchProfiles(); setSelectedProfileIndex(index); - erasePopUp(); + erasePopUp(); } catch (error) { console.error('Erreur lors de la suppression du profil :', error); } }; const confirmDelete = () => { - erasePopUp(); + erasePopUp(); }; const handleGetProfiles = async () => { @@ -77,7 +77,7 @@ export default function Profiles({navigation, props}) { const subscription = EventEmitter.addListener('profileAdded', async () => { fetchProfiles(); }); - + useEffect(() => { fetchProfiles(); console.log(profiles) @@ -86,9 +86,9 @@ export default function Profiles({navigation, props}) { const containerStyle = { height: "75%", width: "100%", - }; + }; + - const styles = StyleSheet.create({ container: { height: "100%", @@ -109,7 +109,7 @@ export default function Profiles({navigation, props}) { separator: { marginTop: "6%" }, - + modal: { position: 'absolute', top: '0%', diff --git a/LeftOvers/screens/RecipeDetails.tsx b/LeftOvers/screens/RecipeDetails.tsx index 74905c8..595e4ee 100644 --- a/LeftOvers/screens/RecipeDetails.tsx +++ b/LeftOvers/screens/RecipeDetails.tsx @@ -8,27 +8,36 @@ import Recipes from '../Models/Recipes'; import { LinearGradient } from 'expo-linear-gradient'; import ListWithoutSelect from '../components/ListWithoutSelect'; import ColorContext from '../theme/ColorContext'; +import Ingredient from '../Models/Ingredient'; export default function RecipeDetails(props) { const {colors} = useContext(ColorContext); + + const [isLoading, setIsLoading] = useState(true) - const [isLoading, setIsLoading] = useState(true); - const [response, setResponse] = useState(undefined); + + + const ingredientList = [new Ingredient(3, "Carrot"), new Ingredient(4, "Potato"), new Ingredient(5, "Peach")] + + const [response, setResponse] = useState(new Recipes (120, "Carrot", "Delicious", 90, ["Fork", "Fish", "Knife"], ingredientList)) const recipesService = new RecipesService(); const loadRecipe = async () => { try { - const recipe = await recipesService.getRecipeById(props.id); + const recipe = await recipesService.getRecipeById(120); + console.log("Recipe.name: "+recipe.name) setResponse(recipe); + console.log("Response.name: "+response.name) } catch (error) { console.log(error); - } finally { - setIsLoading(false); + } finally{ + setIsLoading(false) } }; useEffect(() => { + console.log("Je passe ici (useEffect)") loadRecipe(); }, []); @@ -58,7 +67,7 @@ export default function RecipeDetails(props) { alignItems: 'center', justifyContent: 'center', borderRadius: 20, - backgroundColor: '#F2F0E4', + backgroundColor: colors.cardBackground, padding: "3%", marginHorizontal: "3%", borderWidth: 1, @@ -75,12 +84,12 @@ export default function RecipeDetails(props) { }, filters: { fontSize: 20, - color: '#ACA279', + color: colors.cardElementBorder, flex: 1, }, nbSelected: { fontSize: 11, - color: "#3F3C42", + color: colors.cardDetail, textAlign: "right", }, }); @@ -88,7 +97,7 @@ export default function RecipeDetails(props) { return ( - + - -