ProfileService (addProfile)
continuous-integration/drone/push Build is passing Details

pull/24/head^2
Louison PARANT 1 year ago
parent b7e51a2fa0
commit d1bfdce68d

@ -2,6 +2,6 @@ import Profile from "../../Models/Profile";
export default interface IProfileService {
getProfiles(): Promise<Profile[]>,
addProfile(new_profile: Profile): Promise<boolean>,
addProfile(newProfile: Profile): Promise<boolean>,
delProfile(profile_name_to_del: string): Promise<boolean>
}

@ -1,10 +1,11 @@
import Profile from "../../Models/Profile";
import IProfileService from "./IProfileService";
import AsyncStorage from "@react-native-async-storage/async-storage";
import eventEmitter from "../../screens/EventEmitter";
export default class ProfileService implements IProfileService {
async getProfiles(): Promise<Profile[]> {
const results = await AsyncStorage.getItem('profiles');
const results = await AsyncStorage.getItem('profiles')
const existingProfiles = JSON.parse(results)
if(existingProfiles.length == 0){
existingProfiles.push(new Profile("None", "logo.png", [], [], "none", "none"))
@ -12,15 +13,12 @@ export default class ProfileService implements IProfileService {
return existingProfiles;
}
async addProfile(new_profile : Profile): Promise<boolean> {
const existingProfiles = await this.getProfiles()
for (let current_profile of existingProfiles) {
if (current_profile.name == new_profile.name) {
console.log("Tried to create a profil already existing !")
return false
}
}
await AsyncStorage.setItem('profiles', JSON.stringify([...existingProfiles, new_profile]))
async addProfile(newProfile : Profile): Promise<boolean> {
let existingProfiles = await AsyncStorage.getItem('profiles');
existingProfiles = existingProfiles ? JSON.parse(existingProfiles) : [];
const updatedProfiles = [...existingProfiles, newProfile];
await AsyncStorage.setItem('profiles', JSON.stringify(updatedProfiles));
eventEmitter.emit("profileAdded")
return true
}

@ -37,7 +37,7 @@ export default function ProfilesStackScreen({ navigation }) {
const _handleSearch = () => {
console.log('Searching');
}
const _handleHeaderAdd = () => navigation.navigate('ProfileCreation', { name: String });
const _handleHeaderAdd = () => navigation.navigate('ProfileCreation');
return (
<ProfilesStack.Navigator>

@ -8,7 +8,7 @@ import ListWithoutSelect from '../components/ListWithoutSelect';
import ListSelect from '../components/ListSelect';
import EventEmitter from './EventEmitter';
import * as ImagePicker from 'expo-image-picker';
import AsyncStorage from '@react-native-async-storage/async-storage';
import ProfileService from '../Services/Profiles/ProfileService';
export default function CreateProfile(props) {
@ -19,6 +19,7 @@ export default function CreateProfile(props) {
const [avatar, setAvatar] = useState<string>('');
const [selectedDiets, setSelectedDiets] = useState([]);
const [selectedAllergies] = useState([])
const profileService = new ProfileService()
const handleSelectedDiets = (selectedValues) => {
setSelectedDiets(selectedValues);
@ -48,7 +49,6 @@ export default function CreateProfile(props) {
const handleCreateProfile = async () => {
try {
// Ton code pour récupérer les profils existants et ajouter un nouveau profil
const newProfile = {
name: name,
avatar: avatar,
@ -57,14 +57,7 @@ export default function CreateProfile(props) {
isActive: "flex",
isWaiting: "none",
};
// Mettre à jour AsyncStorage avec le nouveau profil
let existingProfiles = await AsyncStorage.getItem('profiles');
existingProfiles = existingProfiles ? JSON.parse(existingProfiles) : [];
const updatedProfiles = [...existingProfiles, newProfile];
await AsyncStorage.setItem('profiles', JSON.stringify(updatedProfiles));
EventEmitter.emit('profileAdded');
console.log('Profil créé :', newProfile);
profileService.addProfile(newProfile)
props.navigation.goBack();
} catch (error) {
console.error('Erreur lors de la création du profil :', error);

@ -2,14 +2,14 @@ import React, {useContext, useState, useEffect} from 'react';
import {StyleSheet, View, Text, ScrollView, useWindowDimensions} from 'react-native';
import {LinearGradient} from 'expo-linear-gradient';
import {SafeAreaProvider} from 'react-native-safe-area-context';
import ValidateButton from '../components/ValidateButton';
import ListSelect from '../components/ListSelect';
import ListWithoutSelect from '../components/ListWithoutSelect';
import ProfileSelection from '../components/ProfileSelection';
import ColorContext from '../theme/ColorContext';
import EventEmitter from './EventEmitter';
import eventEmitter from './EventEmitter';
import AsyncStorage from '@react-native-async-storage/async-storage';
import ProfileService from '../Services/Profiles/ProfileService';
export default function FiltersSelection(props) {
const {colors} = useContext(ColorContext);
@ -17,52 +17,33 @@ export default function FiltersSelection(props) {
{name: "None", avatar: "logo.png", diets: [], allergies: [], isActive: "none", isWaiting: "none"},
]
const die = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Porkless"}, {value: "Vegan"}, {value: "Vegetarian"}, {value: "Pescatarian"}]
const profileService = new ProfileService()
const [profiles, setProfiles] = useState(profilesHand);
const [dieProfiles, setDieProfiles] = useState([])
const [allProfiles, setAllProfiles] = useState([])
const [dieAdd, setDieAdd] = useState([])
const [allAdd, setAllAdd] = useState([])
const [selectedDiets, setSelectedDiets] = useState([])
let isProfileAdded = false, isUpdateDietsAllergies = false, isSelectedProfilesUpdated = false
const handleGetProfiles = async () => {
try {
const existingProfiles = await AsyncStorage.getItem('profiles');
return JSON.parse(existingProfiles) || [];
} catch (error) {
console.log("Error occured during GetProfiles", error);
return [];
}
}
const fetchProfiles = async () => {
const existingProfiles = await handleGetProfiles()
if(existingProfiles.length != 0){
setProfiles(existingProfiles)
}
else{
setProfiles(profilesHand)
}
};
setProfiles(await profileService.getProfiles())
}
const subscriptionAddProfile = EventEmitter.addListener('profileAdded', async () => {
const subscriptionAddProfile = eventEmitter.addListener('profileAdded', async () => {
fetchProfiles()
console.log("Technique de Shinobi Anti-CodeSmell", selectedDiets)
isProfileAdded = true
subscriptionAddProfile.remove()
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('updateDietsAllergies')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('updateDietsAllergies')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionUpdateDietsAllergies = EventEmitter.addListener('updateDietsAllergies', async() => {
const subscriptionUpdateDietsAllergies = eventEmitter.addListener('updateDietsAllergies', async() => {
setDieAdd(die.filter(isInProfileDiets))
setAllAdd([])
isUpdateDietsAllergies = true
subscriptionUpdateDietsAllergies.remove()
subscriptionUpdateProfiles.remove();
EventEmitter.removeAllListeners('updateDietsAllergies')
eventEmitter.removeAllListeners('updateDietsAllergies')
})
useEffect(() => {
@ -84,22 +65,21 @@ export default function FiltersSelection(props) {
})
await AsyncStorage.setItem('profiles', JSON.stringify(profiles));
fetchProfiles()
EventEmitter.emit("selectedProfilesUpdated")
eventEmitter.emit("selectedProfilesUpdated")
} catch (error) {
console.error('Error occured when updating active profiles:', error);
}
};
const subscriptionUpdateProfiles = EventEmitter.addListener('selectedProfilesUpdated', async () => {
const subscriptionUpdateProfiles = eventEmitter.addListener('selectedProfilesUpdated', async () => {
updateDiets()
updateAllergies()
EventEmitter.emit("updateDietsAllergies")
isSelectedProfilesUpdated = true
eventEmitter.emit("updateDietsAllergies")
console.log("Filters Selection: ---------------------------------------------------")
subscriptionUpdateProfiles.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('updateDietsAllergies')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('updateDietsAllergies')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const updateDiets = () => {
@ -258,22 +238,6 @@ export default function FiltersSelection(props) {
const goBack = () => props.navigation.goBack();
if(isProfileAdded){
//EventEmitter.removeAllListeners('profileAdded')
//EventEmitter.removeAllListeners('updateDietsAllergies')
//EventEmitter.removeAllListeners('selectedProfilesUpdated')
}
if(isUpdateDietsAllergies){
//EventEmitter.removeAllListeners('profileAdded')
//EventEmitter.removeAllListeners('updateDietsAllergies')
//EventEmitter.removeAllListeners('selectedProfilesUpdated')
}
if(isSelectedProfilesUpdated){
//EventEmitter.removeAllListeners('profileAdded')
//EventEmitter.removeAllListeners('updateDietsAllergies')
//EventEmitter.removeAllListeners('selectedProfilesUpdated')
}
return (
<SafeAreaProvider style={{flex: 1}}>
<ScrollView>

@ -9,7 +9,7 @@ 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';
import eventEmitter from './EventEmitter';
import ProfileService from '../Services/Profiles/ProfileService';
export default function HomePage({ navigation, props }) {
@ -45,16 +45,6 @@ export default function HomePage({ navigation, props }) {
}
}
const fetchProfiles2 = async () => {
const existingProfiles = await handleGetProfiles();
if (existingProfiles.length != 0){
setProfiles(existingProfiles);
}
else{
setProfiles(profilesHand)
}
};
const fetchProfiles = async () => {
setProfiles(await profileService.getProfiles())
}
@ -69,17 +59,17 @@ export default function HomePage({ navigation, props }) {
}
};
const subscriptionAddProfile = EventEmitter.addListener('profileAdded', async () => {
const subscriptionAddProfile = eventEmitter.addListener('profileAdded', async () => {
fetchProfiles();
subscriptionAddProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileDeleted')
eventEmitter.removeAllListeners('ingredientAdded')
eventEmitter.removeAllListeners('ingredientDeleted')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionDeleteProfile = EventEmitter.addListener('profileDeleted', async () => {
const subscriptionDeleteProfile = eventEmitter.addListener('profileDeleted', async () => {
if (profiles.length == 1){
setProfiles(profilesHand)
}
@ -87,24 +77,24 @@ export default function HomePage({ navigation, props }) {
fetchProfiles();
}
subscriptionDeleteProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileDeleted')
eventEmitter.removeAllListeners('ingredientAdded')
eventEmitter.removeAllListeners('ingredientDeleted')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionAddIngredient = EventEmitter.addListener('ingredientAdded', async () => {
const subscriptionAddIngredient = eventEmitter.addListener('ingredientAdded', async () => {
fetchAvailableIngredient();
subscriptionAddIngredient.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileDeleted')
eventEmitter.removeAllListeners('ingredientAdded')
eventEmitter.removeAllListeners('ingredientDeleted')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionDeleteIngredient = EventEmitter.addListener('ingredientDeleted', async () => {
const subscriptionDeleteIngredient = eventEmitter.addListener('ingredientDeleted', async () => {
if (ingredientList.length == 1){
setIngredientList(ingredientListHand)
}
@ -112,21 +102,21 @@ export default function HomePage({ navigation, props }) {
fetchAvailableIngredient();
}
subscriptionDeleteIngredient.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileDeleted')
eventEmitter.removeAllListeners('ingredientAdded')
eventEmitter.removeAllListeners('ingredientDeleted')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionUpdateSelectedProfile = EventEmitter.addListener('selectedProfilesUpdated', async () => {
const subscriptionUpdateSelectedProfile = eventEmitter.addListener('selectedProfilesUpdated', async () => {
fetchProfiles();
subscriptionUpdateSelectedProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
eventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileDeleted')
eventEmitter.removeAllListeners('ingredientAdded')
eventEmitter.removeAllListeners('ingredientDeleted')
eventEmitter.removeAllListeners('selectedProfilesUpdated')
});
useEffect(() => {

@ -15,9 +15,6 @@ export default function ModifyProfile(props) {
const [profile, setProfile] = useState(null);
const route = useRoute();
const handleGetProfileByName = async (profileName) => {
try {
const existingProfiles = await AsyncStorage.getItem('profiles');
@ -33,9 +30,9 @@ export default function ModifyProfile(props) {
};
const fetchProfiles = async () => {
const selectedProfil = await handleGetProfileByName(route.params);
setProfile(selectedProfil);
};
const selectedProfil = await handleGetProfileByName(route.params);
setProfile(selectedProfil);
};
useEffect(() => {
fetchProfiles();

@ -3,23 +3,22 @@ import { StyleSheet, View, Modal, Pressable, Text, Image, ScrollView, useWindowD
import { LinearGradient } from 'expo-linear-gradient';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import ProfileService from '../Services/Profiles/ProfileService';
import ProfileDetails from '../components/ProfileDetails';
import ColorContext from '../theme/ColorContext';
import AsyncStorage from '@react-native-async-storage/async-storage';
import EventEmitter from './EventEmitter';
import eventEmitter from './EventEmitter';
import { PaperProvider, Portal } from 'react-native-paper';
export default function Profiles({navigation, props}) {
const colors = useContext(ColorContext).colors
const profileService = new ProfileService()
const [visible, setVisible] = useState(false);
const [profiles, setProfiles] = useState([]);
const [selectedProfileIndex, setSelectedProfileIndex] = useState(null);
const goDetails = (name: string) => navigation.navigate('ProfileCreation', name);
const raisePopUp = (index) => {
setSelectedProfileIndex(index)
setVisible(true)
@ -32,7 +31,7 @@ export default function Profiles({navigation, props}) {
try {
const updatedProfiles = profiles.filter((profile, i) => i !== index);
await AsyncStorage.setItem('profiles', JSON.stringify(updatedProfiles));
EventEmitter.emit('profileDeleted');
eventEmitter.emit('profileDeleted');
fetchProfiles();
setSelectedProfileIndex(index);
erasePopUp();
@ -41,25 +40,15 @@ export default function Profiles({navigation, props}) {
}
};
const handleGetProfiles = async () => {
try {
const existingProfiles = await AsyncStorage.getItem('profiles');
return JSON.parse(existingProfiles) || [];
} catch (error) {
console.log("Error occured during GetProfiles", error);
return [];
}
}
const fetchProfiles = async () => {
const existingProfiles = await handleGetProfiles();
setProfiles(existingProfiles);
};
setProfiles(await profileService.getProfiles())
}
const subscription = EventEmitter.addListener('profileAdded', async () => {
const subscription = eventEmitter.addListener('profileAdded', async () => {
fetchProfiles();
console.log("Profiles sub Added: ------------------------------------")
subscription.remove();
EventEmitter.removeAllListeners('profileAdded')
eventEmitter.removeAllListeners('profileAdded')
});
useEffect(() => {

Loading…
Cancel
Save