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 { export default class Profile {
private _name: string; public name: string;
private _avatar: string; public avatar: string;
private _allergy: string[]; public allergies: string[];
private _diets: string[]; public diets: string[];
public isActive: string;
public isWaiting: string
constructor( name: string, avatar: string, allergy: string[], diets: string[]) { constructor( name: string, avatar: string, allergies: string[], diets: string[], isActive: string, isWaiting: string) {
this._name = name; this.name = name;
this._avatar = avatar; this.avatar = avatar;
this._allergy = allergy; this.diets = diets;
this._diets = diets; this.allergies = allergies;
this.isActive = isActive;
this.isWaiting = isWaiting
} }
get name(): string { // get name(): string {
return this._name; // return this._name;
} // }
// get avatar(): string{
// return this._avatar;
// }
get avatar(): string{ // get allergies(): string[]{
return this._avatar; // return this._allergies;
} // }
get allergy(): string[]{ // get diets(): string[]{
return this._allergy; // return this._diets;
} // }
get diets(): string[]{ // get isActive(): string{
return this._diets; // 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 { export default interface IProfileService {
getProfiles(): Promise<Profil[]>, getProfiles(): Promise<Profile[]>,
addProfile(new_profile: Profil): Promise<boolean>, addProfile(new_profile: Profile): Promise<boolean>,
delProfile(profile_name_to_del: string): 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 IProfileService from "./IProfileService";
import AsyncStorage from "@react-native-async-storage/async-storage"; import AsyncStorage from "@react-native-async-storage/async-storage";
export default class ProfileService implements IProfileService { export default class ProfileService implements IProfileService {
async getProfiles(): Promise<Profil[]> { async getProfiles(): Promise<Profile[]> {
const results = await AsyncStorage.getItem('profiles'); const results = await AsyncStorage.getItem('profiles');
const tmp = JSON.parse(results) const existingProfiles = JSON.parse(results)
let existingProfiles: Profil[] = [] if(existingProfiles.length == 0){
for (let item of tmp) { existingProfiles.push(new Profile("None", "logo.png", [], [], "none", "none"))
existingProfiles.push(new Profil(item._name, item._avatar, item._allergy, item._diets))
} }
return existingProfiles; return existingProfiles;
} }
async addProfile(new_profile : Profil): Promise<boolean> { async addProfile(new_profile : Profile): Promise<boolean> {
const existingProfiles = await this.getProfiles() const existingProfiles = await this.getProfiles()
for (let current_profile of existingProfiles) { for (let current_profile of existingProfiles) {
if (current_profile.name == new_profile.name) { if (current_profile.name == new_profile.name) {

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

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

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

@ -2,17 +2,15 @@ import React, { useContext, useState, useEffect } from 'react';
import { StyleSheet, View, Text, Pressable, Image, ScrollView } from 'react-native'; import { StyleSheet, View, Text, Pressable, Image, ScrollView } from 'react-native';
import {LinearGradient} from 'expo-linear-gradient'; import {LinearGradient} from 'expo-linear-gradient';
import {SafeAreaProvider} from 'react-native-safe-area-context'; import {SafeAreaProvider} from 'react-native-safe-area-context';
import ValidateButton from '../components/ValidateButton'; import ValidateButton from '../components/ValidateButton';
import ProfileSelection from '../components/ProfileSelection'; import ProfileSelection from '../components/ProfileSelection';
import FoodElementText from '../components/FoodElementText'; import FoodElementText from '../components/FoodElementText';
import ColorContext from '../theme/ColorContext'; import ColorContext from '../theme/ColorContext';
import bracketLeft from '../assets/images/angle_bracket_left.png'; import bracketLeft from '../assets/images/angle_bracket_left.png';
import bracketRight from '../assets/images/angle_bracket_right.png'; import bracketRight from '../assets/images/angle_bracket_right.png';
import AsyncStorage from '@react-native-async-storage/async-storage'; 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 }) { export default function HomePage({ navigation, props }) {
const colors = useContext(ColorContext).colors const colors = useContext(ColorContext).colors
@ -25,6 +23,8 @@ export default function HomePage({ navigation, props }) {
const [profiles, setProfiles] = useState(profilesHand); const [profiles, setProfiles] = useState(profilesHand);
const [ingredientList, setIngredientList] = useState(ingredientListHand) const [ingredientList, setIngredientList] = useState(ingredientListHand)
const profileService = new ProfileService()
const handleGetProfiles = async () => { const handleGetProfiles = async () => {
try { try {
const existingProfiles = await AsyncStorage.getItem('profiles'); 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(); const existingProfiles = await handleGetProfiles();
if (existingProfiles.length != 0){ if (existingProfiles.length != 0){
setProfiles(existingProfiles); setProfiles(existingProfiles);
@ -55,6 +55,10 @@ export default function HomePage({ navigation, props }) {
} }
}; };
const fetchProfiles = async () => {
setProfiles(await profileService.getProfiles())
}
const fetchAvailableIngredient = async () => { const fetchAvailableIngredient = async () => {
const existingAvailableIngredient = await handleGetAvailableIngredient(); const existingAvailableIngredient = await handleGetAvailableIngredient();
if (existingAvailableIngredient.length != 0){ if (existingAvailableIngredient.length != 0){
@ -67,6 +71,12 @@ export default function HomePage({ navigation, props }) {
const subscriptionAddProfile = EventEmitter.addListener('profileAdded', async () => { const subscriptionAddProfile = EventEmitter.addListener('profileAdded', async () => {
fetchProfiles(); fetchProfiles();
subscriptionAddProfile.remove();
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 () => {
@ -76,10 +86,22 @@ export default function HomePage({ navigation, props }) {
else{ else{
fetchProfiles(); fetchProfiles();
} }
subscriptionDeleteProfile.remove();
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(); fetchAvailableIngredient();
subscriptionAddIngredient.remove();
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 () => {
@ -89,14 +111,27 @@ export default function HomePage({ navigation, props }) {
else{ else{
fetchAvailableIngredient(); fetchAvailableIngredient();
} }
subscriptionDeleteIngredient.remove();
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(); fetchProfiles();
console.log("Home Page: ===================================================================")
subscriptionUpdateSelectedProfile.remove();
EventEmitter.removeAllListeners('profileAdded')
EventEmitter.removeAllListeners('profileDeleted')
EventEmitter.removeAllListeners('ingredientAdded')
EventEmitter.removeAllListeners('ingredientDeleted')
EventEmitter.removeAllListeners('selectedProfilesUpdated')
}); });
useEffect(() => { useEffect(() => {
AsyncStorage.clear() //AsyncStorage.clear()
fetchProfiles(); fetchProfiles();
if(profiles.length == 0){ if(profiles.length == 0){
setProfiles(profilesHand) setProfiles(profilesHand)

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

Loading…
Cancel
Save