Fix EventEmitter Issue
continuous-integration/drone/push Build is passing Details

pull/24/head^2
Louison PARANT 1 year ago
parent 3194aef519
commit 704f8d9682

@ -1,30 +1,41 @@
export default class Profile {
private _name: string;
private _avatar: string;
private _allergy: string[];
private _diets: string[];
public name: string;
public avatar: string;
public allergies: string[];
public diets: string[];
public isActive: string;
public isWaiting: string
constructor( name: string, avatar: string, allergy: string[], diets: string[]) {
this._name = name;
this._avatar = avatar;
this._allergy = allergy;
this._diets = diets;
constructor( name: string, avatar: string, allergies: string[], diets: string[], isActive: string, isWaiting: string) {
this.name = name;
this.avatar = avatar;
this.diets = diets;
this.allergies = allergies;
this.isActive = isActive;
this.isWaiting = isWaiting
}
get name(): string {
return this._name;
}
// get name(): string {
// return this._name;
// }
// get avatar(): string{
// return this._avatar;
// }
get avatar(): string{
return this._avatar;
}
// get allergies(): string[]{
// return this._allergies;
// }
get allergy(): string[]{
return this._allergy;
}
// get diets(): string[]{
// return this._diets;
// }
get diets(): string[]{
return this._diets;
}
// get isActive(): string{
// return this._isActive;
// }
// get isWaiting(): string{
// return this._isWaiting;
// }
}

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

@ -1,19 +1,18 @@
import Profil from "../../Models/Profil";
import Profile from "../../Models/Profile";
import IProfileService from "./IProfileService";
import AsyncStorage from "@react-native-async-storage/async-storage";
export default class ProfileService implements IProfileService {
async getProfiles(): Promise<Profil[]> {
async getProfiles(): Promise<Profile[]> {
const results = await AsyncStorage.getItem('profiles');
const tmp = JSON.parse(results)
let existingProfiles: Profil[] = []
for (let item of tmp) {
existingProfiles.push(new Profil(item._name, item._avatar, item._allergy, item._diets))
const existingProfiles = JSON.parse(results)
if(existingProfiles.length == 0){
existingProfiles.push(new Profile("None", "logo.png", [], [], "none", "none"))
}
return existingProfiles;
}
async addProfile(new_profile : Profil): Promise<boolean> {
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) {

@ -12,6 +12,11 @@ export default function ListWithoutSelect(props: ListProps) {
const [selected, setSelected] = React.useState([]);
const colors = useContext(ColorContext).colors;
let listContent = []
props.content.forEach((val) => {
listContent.push({value: val, disabled: true})
})
const styles = StyleSheet.create({
titleBar: {
flexDirection: "row",
@ -80,7 +85,7 @@ export default function ListWithoutSelect(props: ListProps) {
return (
<MultipleSelectList
setSelected={(val) => setSelected(val)}
data={props.content}
data={listContent}
save="value"
search={false}
arrowicon={<Image source={require("../assets/images/arrow.png")} style={styles.arrow}></Image>}
@ -98,4 +103,3 @@ export default function ListWithoutSelect(props: ListProps) {
label={props.title}/>
);
}

@ -40,7 +40,7 @@ export default function BottomBar({ state, descriptors, navigation }) {
bottom: 0,
right: 0,
left: 0,
height: "8%",
height: 60,
backgroundColor: theme === 'dark' ? "#3F3C42" : "transparent"
},
BottomBarBlurContainer: {

@ -24,6 +24,7 @@ export default function FiltersSelection(props) {
const [dieAdd, setDieAdd] = useState([])
const [allAdd, setAllAdd] = useState([])
const [selectedDiets, setSelectedDiets] = useState([])
let isProfileAdded = false, isUpdateDietsAllergies = false, isSelectedProfilesUpdated = false
const handleGetProfiles = async () => {
try {
@ -45,30 +46,30 @@ export default function FiltersSelection(props) {
}
};
const subscription = 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')
});
let cptSubscription = 1
const subscriptionUpdateDietsAllergies = EventEmitter.addListener('updateDietsAllergies', async () => {
updateDiets()
const subscriptionUpdateDietsAllergies = EventEmitter.addListener('updateDietsAllergies', async() => {
setDieAdd(die.filter(isInProfileDiets))
console.log("Passage Subsciption:", cptSubscription)
});
let cptSubscriptionDiets = 1
const subscriptionUpdateDiets = EventEmitter.addListener('updateDiets', async () => {
setDieAdd(die.filter(isInProfileDiets))
console.log("Passage SubsciptionDiets:", cptSubscriptionDiets)
});
setAllAdd([])
isUpdateDietsAllergies = true
subscriptionUpdateDietsAllergies.remove()
subscriptionUpdateProfiles.remove();
EventEmitter.removeAllListeners('updateDietsAllergies')
})
useEffect(() => {
fetchProfiles()
}, []);
const handleSaveSelectedProfiles = async () => {
async function handleSaveSelectedProfiles(){
try {
profiles.forEach((val) => {
if(val.isWaiting == "flex"){
@ -83,19 +84,23 @@ export default function FiltersSelection(props) {
})
await AsyncStorage.setItem('profiles', JSON.stringify(profiles));
fetchProfiles()
updateDiets()
setDieAdd(die.filter(isInProfileDiets))
updateAllergies()
setAllAdd([])
console.log("handleSaveSelectedProfiles: __________________________________________________")
EventEmitter.emit("selectedProfilesUpdated")
} catch (error) {
console.error('Error occured when updating active profiles:', error);
}
};
const subscriptionUpdateSelectedProfiles = EventEmitter.addListener('selectedProfilesUpdated', async () => {
fetchProfiles()
const subscriptionUpdateProfiles = EventEmitter.addListener('selectedProfilesUpdated', async () => {
updateDiets()
setDieAdd(die.filter(isInProfileDiets))
updateAllergies()
EventEmitter.emit("updateDietsAllergies")
console.log("Filters Selection: -------------------------------------------------")
isSelectedProfilesUpdated = true
subscriptionUpdateProfiles.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('updateDietsAllergies')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const updateDiets = () => {
@ -138,7 +143,6 @@ export default function FiltersSelection(props) {
}
})
setAllProfiles(allTemp)
console.log("Technique de Shinobi Anti-CodeSmell", selectedDiets)
}
const changeStatusWaiting = (cpt) => {
@ -255,6 +259,22 @@ 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>

@ -2,17 +2,15 @@ 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';
import ValidateButton from '../components/ValidateButton';
import ProfileSelection from '../components/ProfileSelection';
import FoodElementText from '../components/FoodElementText';
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 ProfileService from '../Services/Profiles/ProfileService';
export default function HomePage({ navigation, props }) {
const colors = useContext(ColorContext).colors
@ -25,6 +23,8 @@ export default function HomePage({ navigation, props }) {
const [profiles, setProfiles] = useState(profilesHand);
const [ingredientList, setIngredientList] = useState(ingredientListHand)
const profileService = new ProfileService()
const handleGetProfiles = async () => {
try {
const existingProfiles = await AsyncStorage.getItem('profiles');
@ -45,7 +45,7 @@ export default function HomePage({ navigation, props }) {
}
}
const fetchProfiles = async () => {
const fetchProfiles2 = async () => {
const existingProfiles = await handleGetProfiles();
if (existingProfiles.length != 0){
setProfiles(existingProfiles);
@ -55,6 +55,10 @@ export default function HomePage({ navigation, props }) {
}
};
const fetchProfiles = async () => {
setProfiles(await profileService.getProfiles())
}
const fetchAvailableIngredient = async () => {
const existingAvailableIngredient = await handleGetAvailableIngredient();
if (existingAvailableIngredient.length != 0){
@ -67,6 +71,12 @@ export default function HomePage({ navigation, props }) {
const subscriptionAddProfile = EventEmitter.addListener('profileAdded', async () => {
fetchProfiles();
subscriptionAddProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionDeleteProfile = EventEmitter.addListener('profileDeleted', async () => {
@ -76,10 +86,22 @@ export default function HomePage({ navigation, props }) {
else{
fetchProfiles();
}
subscriptionDeleteProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionAddIngredient = EventEmitter.addListener('ingredientAdded', async () => {
fetchAvailableIngredient();
subscriptionAddIngredient.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionDeleteIngredient = EventEmitter.addListener('ingredientDeleted', async () => {
@ -89,14 +111,27 @@ export default function HomePage({ navigation, props }) {
else{
fetchAvailableIngredient();
}
subscriptionDeleteIngredient.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
const subscriptionUpdateSelectedProfile = EventEmitter.addListener('selectedProfilesUpdated', async () => {
fetchProfiles();
console.log("Home Page: ===================================================================")
subscriptionUpdateSelectedProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
});
useEffect(() => {
AsyncStorage.clear()
//AsyncStorage.clear()
fetchProfiles();
if(profiles.length == 0){
setProfiles(profilesHand)

@ -58,6 +58,8 @@ export default function Profiles({navigation, props}) {
const subscription = EventEmitter.addListener('profileAdded', async () => {
fetchProfiles();
subscription.remove();
EventEmitter.removeAllListeners('profileAdded')
});
useEffect(() => {

Loading…
Cancel
Save