diff --git a/LeftOvers/Services/Ingredients/IIngredientService.tsx b/LeftOvers/Services/Ingredients/IIngredientService.tsx index 926f9be..687386c 100644 --- a/LeftOvers/Services/Ingredients/IIngredientService.tsx +++ b/LeftOvers/Services/Ingredients/IIngredientService.tsx @@ -5,4 +5,7 @@ export default interface IIngredientService { getIngredientById(id: number): Promise; getIngredientByLetter(id: string): Promise; getfilteredIngredient(prompt: string): Promise; + getAvailableIngredient(): Promise, + addIngredient(newIngredient: Ingredient): Promise, + delIngredient(idIngredient: number): Promise } \ No newline at end of file diff --git a/LeftOvers/Services/Ingredients/IngredientsServices.tsx b/LeftOvers/Services/Ingredients/IngredientsServices.tsx index d50cc89..eb2f5e4 100644 --- a/LeftOvers/Services/Ingredients/IngredientsServices.tsx +++ b/LeftOvers/Services/Ingredients/IngredientsServices.tsx @@ -1,6 +1,8 @@ +import AsyncStorage from "@react-native-async-storage/async-storage"; import Ingredient from "../../Models/Ingredient"; import IIngredientService from "./IIngredientService"; import axios from 'axios'; +import eventEmitter from "../../screens/EventEmitter"; export default class IngredientService implements IIngredientService { private readonly API_URL = "http://leftovers.alwaysdata.net/ingredients"; @@ -41,4 +43,36 @@ export default class IngredientService implements IIngredientService { throw new Error('Erreur lors de la récupération des ingrédients : ' + error.message); } } + + async getAvailableIngredient(): Promise { + const results = await AsyncStorage.getItem('ingredient') + const availableIngredient = JSON.parse(results) + if(availableIngredient.length == 0){ + availableIngredient.push(new Ingredient(-1, "None")) + } + console.log("AvailableIngredient:", availableIngredient) + return availableIngredient; + } + + async addIngredient(newIngredient: Ingredient): Promise { + let selectedIngredients = await this.getAvailableIngredient() + const exists = selectedIngredients.find((ingredient) => ingredient.id === newIngredient.id); + if (!exists) { + let existingAvailableIngredient = await AsyncStorage.getItem('ingredient'); + existingAvailableIngredient = existingAvailableIngredient ? JSON.parse(existingAvailableIngredient) : []; + const updatedAvailableIngredient = [...existingAvailableIngredient, newIngredient]; + await AsyncStorage.setItem('ingredient', JSON.stringify(updatedAvailableIngredient)); + eventEmitter.emit('ingredientAdded'); + return true + } + return false + } + + async delIngredient(idIngredient: number): Promise { + let selectedIngredients = await this.getAvailableIngredient() + const updatedIngredients = selectedIngredients.filter((ingredient) => ingredient.id !== idIngredient); + await AsyncStorage.setItem('ingredient', JSON.stringify(updatedIngredients)); + eventEmitter.emit('ingredientDeleted'); + return true + } } diff --git a/LeftOvers/screens/IngredientSelection.tsx b/LeftOvers/screens/IngredientSelection.tsx index ce0e7da..6fb8d4c 100644 --- a/LeftOvers/screens/IngredientSelection.tsx +++ b/LeftOvers/screens/IngredientSelection.tsx @@ -9,7 +9,7 @@ import IngredientService from '../Services/Ingredients/IngredientsServices'; import ColorContext from '../theme/ColorContext'; import ValidateButton from '../components/ValidateButton'; import AsyncStorage from '@react-native-async-storage/async-storage'; -import EventEmitter from './EventEmitter'; +import eventEmitter from './EventEmitter'; import plus from '../assets/images/plus.png'; import moins from '../assets/images/minus.png'; @@ -50,8 +50,7 @@ export default function IngredientSelection(props) { const loadIngredients = async () => { try { - const ingredients = await ingredientService.getAllIngredient(); - setResponse(ingredients); + setResponse(await ingredientService.getAllIngredient()); } catch (error) { console.log(error); } finally { @@ -107,7 +106,7 @@ const fetchAvailableIngredient = async () => { setSelectedIngredients(existingAvailableIngredient); } else{ - setSelectedIngredients([{value: "None"}]) + setSelectedIngredients([new Ingredient(-1, "None")]) } }; @@ -119,7 +118,7 @@ const fetchAvailableIngredient = async () => { existingAvailableIngredient = existingAvailableIngredient ? JSON.parse(existingAvailableIngredient) : []; const updatedAvailableIngredient = [...existingAvailableIngredient, newIngredient]; await AsyncStorage.setItem('ingredient', JSON.stringify(updatedAvailableIngredient)); - EventEmitter.emit('ingredientAdded'); + eventEmitter.emit('ingredientAdded'); fetchAvailableIngredient(); console.log('Ingredient Added:', newIngredient); ChangeAvailableSize(false) @@ -134,6 +133,7 @@ const fetchAvailableIngredient = async () => { try{ const updatedIngredients = selectedIngredients.filter((ingredient) => ingredient.id !== idIngredient); await AsyncStorage.setItem('ingredient', JSON.stringify(updatedIngredients)); + eventEmitter.emit('ingredientDeleted'); fetchAvailableIngredient(); setSelectedIngredients(updatedIngredients); ChangeAvailableSize(true) @@ -166,7 +166,7 @@ const fetchAvailableIngredient = async () => { setAvailableSize(90) } else if (selectedIngredients.length == 1){ - if(selectedIngredients[0].value == "None"){ + if(selectedIngredients[0].name == "None"){ setAvailableSize(90) } else{