aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/profile/ProfileMoreInfoDrawer.tsx6
-rw-r--r--src/routes/main/MainStackNavigator.tsx3
-rw-r--r--src/screens/badge/BadgeSelection.tsx47
-rw-r--r--src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx43
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} />