diff options
author | Shravya Ramesh <shravs1208@gmail.com> | 2021-03-12 08:42:46 -0800 |
---|---|---|
committer | Shravya Ramesh <shravs1208@gmail.com> | 2021-03-12 08:42:46 -0800 |
commit | f399478fb2fe460ead185b0da7769faed8a8c515 (patch) | |
tree | 423ac6ae778332f936862d8969f7375ec9d5bd7e | |
parent | 803b7a7bcb173d6a263c9d43fec41e5cddfe98f4 (diff) |
done
4 files changed, 61 insertions, 38 deletions
diff --git a/src/components/profile/ProfileMoreInfoDrawer.tsx b/src/components/profile/ProfileMoreInfoDrawer.tsx index 90f5da48..d8f91abe 100644 --- a/src/components/profile/ProfileMoreInfoDrawer.tsx +++ b/src/components/profile/ProfileMoreInfoDrawer.tsx @@ -42,7 +42,11 @@ const ProfileMoreInfoDrawer: React.FC<ProfileMoreInfoDrawerProps> = (props) => { if (suggested_people_linked === 0) { Alert.alert(ERROR_ATTEMPT_EDIT_SP); } else { - navigation.push('UpdateSPPicture'); + // Sending undefined for updatedSelectedBadges to mark that there was no update yet + navigation.push('UpdateSPPicture', { + editing: true, + updatedSelectedBadges: undefined, + }); setIsOpen(false); } }; diff --git a/src/routes/main/MainStackNavigator.tsx b/src/routes/main/MainStackNavigator.tsx index 22819824..6992f83f 100644 --- a/src/routes/main/MainStackNavigator.tsx +++ b/src/routes/main/MainStackNavigator.tsx @@ -77,10 +77,11 @@ export type MainStackParams = { }; UpdateSPPicture: { editing: boolean; + updatedSelectedBadges: string[] | undefined; }; BadgeSelection: { editing: boolean; - selectedBadges: UniversityBadge[]; + prevSelectedBadges: string[]; }; MutualBadgeHolders: { badge_id: string; diff --git a/src/screens/badge/BadgeSelection.tsx b/src/screens/badge/BadgeSelection.tsx index ba2e6af4..a67206c4 100644 --- a/src/screens/badge/BadgeSelection.tsx +++ b/src/screens/badge/BadgeSelection.tsx @@ -1,5 +1,4 @@ import {RouteProp} from '@react-navigation/core'; -import {StackNavigationProp} from '@react-navigation/stack'; import React, {useEffect, useState} from 'react'; import {Alert, SafeAreaView, StatusBar, StyleSheet, View} from 'react-native'; import {Text} from 'react-native-animatable'; @@ -12,33 +11,32 @@ import {BACKGROUND_GRADIENT_MAP} from '../../constants'; import {BADGE_DATA} from '../../constants/badges'; import {ERROR_BADGES_EXCEED_LIMIT} from '../../constants/strings'; import {suggestedPeopleBadgesFinished} from '../../store/actions'; -import {BackgroundGradientType, UniversityBadge} from '../../types'; +import {BackgroundGradientType} from '../../types'; import {SCREEN_HEIGHT, StatusBarHeight} from '../../utils'; import BadgeList from './BadgeList'; import BadgeScreenHeader from './BadgeScreenHeader'; +import {useNavigation} from '@react-navigation/native'; /** * Home Screen for displaying Tagg Badge Selections **/ -type BadgeSelectionParamList = { - BadgeList: any[]; -}; - -type BadgeSelectionScreenNavigationProp = StackNavigationProp< - BadgeSelectionParamList, - 'BadgeList' ->; - type BadgeSelectionRouteProp = RouteProp<MainStackParams, 'BadgeSelection'>; type BadgeSelectionProps = { - navigation: BadgeSelectionScreenNavigationProp; - route?: BadgeSelectionRouteProp; + route: BadgeSelectionRouteProp; }; -const BadgeSelection: React.FC<BadgeSelectionProps> = ({navigation, route}) => { +const BadgeSelection: React.FC<BadgeSelectionProps> = ({route}) => { + const prevSelectedBadges = route.params.prevSelectedBadges; + const [selectedBadges, setSelectedBadges] = useState<string[]>([]); const dispatch = useDispatch(); + const navigation = useNavigation(); + + useEffect(() => { + setSelectedBadges(prevSelectedBadges); + }, [prevSelectedBadges]); + navigation.setOptions({ headerRight: () => ( <TouchableOpacity @@ -46,7 +44,10 @@ const BadgeSelection: React.FC<BadgeSelectionProps> = ({navigation, route}) => { onPress={async () => { if (route?.params.editing) { updateBadgesService(selectedBadges); - navigation.goBack(); + navigation.navigate('UpdateSPPicture', { + editing: true, + updatedSelectedBadges: selectedBadges, + }); } else { if (selectedBadges.length !== 0) { const success = await addBadgesService(selectedBadges); @@ -67,22 +68,6 @@ const BadgeSelection: React.FC<BadgeSelectionProps> = ({navigation, route}) => { ), }); - const [selectedBadges, setSelectedBadges] = useState<string[]>([]); - - // Get list of badges from the backend and display here - useEffect(() => { - const extractBadgeNames = (badges: UniversityBadge[]) => { - let extractedBadgeNames: string[] = []; - badges.forEach((badge) => { - extractedBadgeNames.push(badge.name); - }); - setSelectedBadges(extractedBadgeNames); - }; - if (route && route.params.selectedBadges) { - extractBadgeNames(route.params.selectedBadges); - } - }, []); - const selectKey = (key: string) => { if (selectedBadges.includes(key)) { const selectedBadgesArray = [...selectedBadges]; diff --git a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx index c5a4ce61..edab2865 100644 --- a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx +++ b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx @@ -1,4 +1,4 @@ -import {useNavigation} from '@react-navigation/native'; +import {RouteProp, useNavigation} from '@react-navigation/native'; import React, {useEffect, useState} from 'react'; import { Alert, @@ -26,12 +26,27 @@ import {uploadedSuggestedPeoplePhoto} from '../../store/actions'; import {RootState} from '../../store/rootReducer'; import {normalize, SCREEN_HEIGHT, SCREEN_WIDTH} from '../../utils'; import FrontArrow from '../../assets/icons/front-arrow.svg'; +import {MainStackParams} from 'src/routes'; -const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { - const {editing} = route.params; +type SuggestedPeopleUploadPictureScreenRouteProp = RouteProp< + MainStackParams, + 'UpdateSPPicture' +>; + +type SuggestedPeopleUploadPictureScreenProps = { + route: SuggestedPeopleUploadPictureScreenRouteProp; +}; + +const SuggestedPeopleUploadPictureScreen: React.FC<SuggestedPeopleUploadPictureScreenProps> = ({ + route, +}) => { + const {editing, updatedSelectedBadges} = route.params; const [image, setImage] = useState<string | undefined>(undefined); const [oldImage, setOldImage] = useState<string | undefined>(undefined); const [selectedBadges, setSelectedBadges] = useState<UniversityBadge[]>([]); + const [extractedSelectedBadges, setExtractedSelectedBadges] = useState< + string[] + >([]); const [loading, setLoading] = useState(false); const dispatch = useDispatch(); const navigation = useNavigation(); @@ -46,7 +61,6 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { setImage(response.suggested_people_url); setSelectedBadges(response.badges); setOldImage(response.suggested_people_url); - console.log('Current Image: ', response.suggested_people_url); } }; // if we're in edit SP, attempt to load current sp image @@ -55,6 +69,25 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { } }, []); + // Get list of badges from the backend and display here + useEffect(() => { + const extractBadgeNames = () => { + let extractedBadgeNames: string[] = updatedSelectedBadges + ? updatedSelectedBadges + : []; + // Receive undefined if you're coming from any screen + if (!updatedSelectedBadges) { + selectedBadges.forEach((badge) => { + if (!extractedBadgeNames.includes(badge.name)) { + extractedBadgeNames.push(badge.name); + } + }); + } + setExtractedSelectedBadges(extractedBadgeNames); + }; + extractBadgeNames(); + }, [selectedBadges, updatedSelectedBadges]); + const openImagePicker = () => { ImagePicker.openPicker({ smartAlbums: [ @@ -155,7 +188,7 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { <TouchableOpacity onPress={() => { navigation.push('BadgeSelection', { - selectedBadges, + prevSelectedBadges: extractedSelectedBadges, }); }}> <FrontArrow style={styles.rightArrow} /> |