Merge branch 'master' into WORK-RRE

WORK-RRE
Rémi REGNAULT 1 year ago
commit 07600429e4

@ -0,0 +1,9 @@
export enum IngredientClass {
DairyFree = 'DAIRY_FREE',
GlutenFree = 'GLUTEN_FREE',
Porcless = 'PORCLESS',
Vegan = 'VEGAN',
Vegetarian = 'VEGETARIAN',
Pescatarian = 'PESCATARIAN',
None = 'NONE'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

@ -1,5 +1,5 @@
import React, {useContext} from 'react';
import {StyleSheet, Pressable, Text, View, Image, ScrollView} from 'react-native';
import React, {useContext, useState} from 'react';
import {StyleSheet, Pressable, Text, View, Image, ScrollView, ImageSourcePropType} from 'react-native';
import brochette from '../assets/images/brochette.png';
import Union_left from '../assets/images/Union_left.png';
import Union_right from '../assets/images/Union_right.png';
@ -22,6 +22,8 @@ import riceFish from '../assets/images/rice_fish.png';
import riceEgg from '../assets/images/riceEgg.png';
import pasta from '../assets/images/pasta.png';
import ColorContext from '../theme/ColorContext';
import fruit from '../assets/images/fruit.png';
import fruitCake from '../assets/images/fruitcake.png';
import Recipes from '../Models/Recipes';
@ -44,13 +46,25 @@ function convertToHoursMinutes(totalMinutes: number): string {
export default function RecipeElement(props: RecipeElementProps) {
const {colors} = useContext(ColorContext)
const meatDictionary: string[] = ["beef", "chicken", "turkey", "steak", "rabbit", "duck"]
const porkDictionary: string[] = ["pork", "lardon", "bacon", "ham"]
const meatDictionary: string[] = ["beef", "chicken", "turkey", "steak", "rabbit", "duck", "horse"]
const porkDictionary: string[] = ["pork", "lardon", "bacon", "ham", "pig"]
const fishDictionary: string[] = ["tuna", "whiting", "mullet", "sardine", "mackerel", "salmon", "monkfish", "conger", "bass", "cod", "hake"]
const vegetablesDictionary: string[] = ["vegan", "vegetarian", "lentil", "artichoke", "aubergine", "beet", "chard", "broccoli", "carrot", "celery", "cabbage", "cauliflower", "zucchini", "spinach", "fennel", "curly", "bean", "lettuce", "apple", "corn", "onion", "parsnips", "leek", "pepper", "potato", "pumpkin", "radish", "scarole", "tomato"]
const riceDictionary: string[] = ["ric", "quinoa"]
const fruitDictionnary: string[] = [
"fruit",
"berries",
"apple",
"banana",
"orange",
"grapes",
"strawberry",
"pineapple",
"watermelon",
"kiwi"
];
const riceDictionary: string[] = ["rice", "quinoa"]
const eggDictionary: string[] = ["egg", "omelette"];
const soupDictionary: string[] = ["soup"];
const soupDictionary: string[] = ["soup", "ragout"];
const pizzaDictionary: string[] = ["pizza"];
const dessertDictionary: string[] = ['cake', 'cupcake', 'muffin', 'cookie', 'brownie', 'pie', 'tart', 'macaron', 'doughnut', 'eclair', 'pancake', 'waffle', 'crepe', 'pudding', 'gelato', 'sorbet', 'ice cream', 'cheesecake', 'sugar'];
const pastaDictionary: string[] = [
@ -83,6 +97,7 @@ export default function RecipeElement(props: RecipeElementProps) {
soup : soupDictionary,
dessert : dessertDictionary,
pasta : pastaDictionary,
fruit : fruitDictionnary,
unknown: [],
};
@ -99,6 +114,7 @@ export default function RecipeElement(props: RecipeElementProps) {
soupMeat: ['soup', 'meat'],
soupVeggie: ['soup', 'vegetables'],
soupFish: ['soup', 'fish'],
fruitDessert: ['fruit', 'dessert']
};
if(categories.length == 1){
@ -168,6 +184,10 @@ export default function RecipeElement(props: RecipeElementProps) {
return soupMeat;
case 'soupFish':
return soupFish;
case 'fruitDessert':
return fruitCake;
case 'fruit':
return fruit;
default:
return inconnu;
}
@ -255,7 +275,7 @@ export default function RecipeElement(props: RecipeElementProps) {
<Text style={styles.text}>Description</Text>
<Image source={Union_right} style={{width: "27%", marginLeft: "3%", resizeMode: "contain"}}/>
</View>
<ScrollView style={{marginTop: "3%", overflow: "hidden", maxHeight: 70}}>
<ScrollView style={{marginTop: "3%", overflow: "hidden"}}>
<Text style={styles.smallText}>{props.recipe.description}</Text>
</ScrollView>
</View>
@ -263,5 +283,7 @@ export default function RecipeElement(props: RecipeElementProps) {
<Text style={styles.duration}>{convertToHoursMinutes(props.recipe.time_to_cook)}</Text>
</View>
</Pressable>
);
);
}

@ -10,6 +10,7 @@ import ColorContext from '../theme/ColorContext';
import eventEmitter from './EventEmitter';
import AsyncStorage from '@react-native-async-storage/async-storage';
import ProfileService from '../Services/Profiles/ProfileService';
import { IngredientClass } from '../Models/IngredientClass';
export default function FiltersSelection(props) {
const {colors} = useContext(ColorContext);
@ -24,6 +25,7 @@ export default function FiltersSelection(props) {
const [dieAdd, setDieAdd] = useState([])
const [allAdd, setAllAdd] = useState([])
const [selectedDiets, setSelectedDiets] = useState([])
const [activeDiets, setActiveDiets] = useState([])
const fetchProfiles = async () => {
setProfiles(await profileService.getProfiles())
@ -234,7 +236,65 @@ export default function FiltersSelection(props) {
},
});
const goBack = () => props.navigation.goBack();
const handleSaveFilters = async () => {
let dieTemp = []
let retType = true
profiles.forEach((profile) => {
if(profile.isActive == "flex"){
profile.diets.forEach((diet) => {
retType = true
dieTemp.forEach((val) => {
if(val == diet){
retType = false
}
})
if(retType){
dieTemp.push(diet)
}
})
}
})
selectedDiets.forEach((diet) => {
retType = true
dieTemp.forEach((val) => {
if(val == diet){
retType = false
}
})
if(retType){
dieTemp.push(diet)
}
})
setActiveDiets(await handleCastFilters(dieTemp))
eventEmitter.emit("updateActiveDiets")
props.navigation.goBack()
}
const handleCastFilters = async (values) => {
let diets = []
values.forEach((val) => {
if (val == "Dairy free"){
diets.push(IngredientClass.DairyFree)
}
else if (val == "Gluten free"){
diets.push(IngredientClass.GlutenFree)
}
else if (val == "Porkless"){
diets.push(IngredientClass.Porcless)
}
else if (val == "Vegan"){
diets.push(IngredientClass.Vegan)
}
else if (val == "Vegetarian"){
diets.push(IngredientClass.Vegetarian)
}
else{
diets.push(IngredientClass.Pescatarian)
}
})
await AsyncStorage.setItem('activeDiets', JSON.stringify(diets));
return diets
}
return (
<SafeAreaProvider style={{flex: 1}}>
@ -273,7 +333,7 @@ export default function FiltersSelection(props) {
<ValidateButton title="Add Allergy" image="plus.png" colour={colors.buttonDetail} backColour={colors.buttonBackground} todo={() => props.navigation.navigate("IngredientSelection")}></ValidateButton>
</View>
<View style={{marginTop: "6%"}}/>
<ValidateButton title="Save Filters" image="save.png" colour={colors.buttonMain} backColour={colors.cardBackground} todo={goBack}></ValidateButton>
<ValidateButton title="Save Filters" image="save.png" colour={colors.buttonMain} backColour={colors.cardBackground} todo={handleSaveFilters}></ValidateButton>
<View style={{marginTop: "20%"}}/>
</LinearGradient>
</ScrollView>

@ -26,6 +26,8 @@ import riceFish from '../assets/images/rice_fish.png';
import riceEgg from '../assets/images/riceEgg.png';
import brochette from '../assets/images/brochette.png';
import pasta from '../assets/images/pasta.png';
import fruit from '../assets/images/fruit.png';
import fruitCake from '../assets/images/fruitcake.png';
@ -41,13 +43,25 @@ export default function RecipeDetails({ route }) {
const { recipeId } = route.params;
const meatDictionary: string[] = ["beef", "chicken", "turkey", "steak", "rabbit", "duck"]
const porkDictionary: string[] = ["pork", "lardon", "bacon", "ham"]
const meatDictionary: string[] = ["beef", "chicken", "turkey", "steak", "rabbit", "duck", "horse"]
const porkDictionary: string[] = ["pork", "lardon", "bacon", "ham", "pig"]
const fishDictionary: string[] = ["tuna", "whiting", "mullet", "sardine", "mackerel", "salmon", "monkfish", "conger", "bass", "cod", "hake"]
const vegetablesDictionary: string[] = ["vegan", "vegetarian", "lentil", "artichoke", "aubergine", "beet", "chard", "broccoli", "carrot", "celery", "cabbage", "cauliflower", "zucchini", "spinach", "fennel", "curly", "bean", "lettuce", "apple", "corn", "onion", "parsnips", "leek", "pepper", "potato", "pumpkin", "radish", "scarole", "tomato"]
const riceDictionary: string[] = ["ric", "quinoa"]
const fruitDictionnary: string[] = [
"fruit",
"berries",
"apple",
"banana",
"orange",
"grapes",
"strawberry",
"pineapple",
"watermelon",
"kiwi"
];
const riceDictionary: string[] = ["rice", "quinoa"]
const eggDictionary: string[] = ["egg", "omelette"];
const soupDictionary: string[] = ["soup"];
const soupDictionary: string[] = ["soup", "ragout"];
const pizzaDictionary: string[] = ["pizza"];
const dessertDictionary: string[] = ['cake', 'cupcake', 'muffin', 'cookie', 'brownie', 'pie', 'tart', 'macaron', 'doughnut', 'eclair', 'pancake', 'waffle', 'crepe', 'pudding', 'gelato', 'sorbet', 'ice cream', 'cheesecake', 'sugar'];
const pastaDictionary: string[] = [
@ -80,6 +94,7 @@ export default function RecipeDetails({ route }) {
soup : soupDictionary,
dessert : dessertDictionary,
pasta : pastaDictionary,
fruit : fruitDictionnary,
unknown: [],
};
@ -96,6 +111,7 @@ export default function RecipeDetails({ route }) {
soupMeat: ['soup', 'meat'],
soupVeggie: ['soup', 'vegetables'],
soupFish: ['soup', 'fish'],
fruitDessert: ['fruit', 'dessert']
};
if(categories.length == 1){
@ -165,6 +181,10 @@ export default function RecipeDetails({ route }) {
return soupMeat;
case 'soupFish':
return soupFish;
case 'fruitDessert':
return fruitCake;
case 'fruit':
return fruit;
default:
return inconnu;
}

@ -17,7 +17,8 @@ import plus from '../assets/images/plus_small.png';
import minus from '../assets/images/minus.png';
import RecipesServices from '../Services/Recipes/RecipesServices';
import Recipes from '../Models/Recipes';
import eventEmitter from './EventEmitter';
import AsyncStorage from '@react-native-async-storage/async-storage';
export default function RecipeSuggestion({ route, navigation }) {
const {colors} = useContext(ColorContext)
@ -32,6 +33,7 @@ export default function RecipeSuggestion({ route, navigation }) {
const recipeService = new RecipesServices();
const {ingredients} = route.params;
const limitedList = ingredients.slice(minCpt, maxCpt);
const [activeDiets, setActiveDiets] = useState([])
let selectedIngredients: string[];
@ -104,7 +106,8 @@ export default function RecipeSuggestion({ route, navigation }) {
};
useEffect(() => {
loadRecipes();
loadRecipes()
fetchActiveDiets()
}, []);
const styles = StyleSheet.create({
@ -196,6 +199,19 @@ export default function RecipeSuggestion({ route, navigation }) {
},
});
const subscriptionUpdateActiveDiets = eventEmitter.addListener('updateActiveDiets', async () => {
fetchActiveDiets()
subscriptionUpdateActiveDiets.remove();
});
const fetchActiveDiets = async () => {
const results = await AsyncStorage.getItem('activeDiets')
let existingActiveDiets = JSON.parse(results)
if(existingActiveDiets.length == 0){
existingActiveDiets = []
}
setActiveDiets(existingActiveDiets)
}
const ingredientElements = limitedList.map((source, index) => (
<View style={[styles.horizontalAlignment, {marginVertical: "3%"}]} key={index}>

Loading…
Cancel
Save