From 8918be8b82167f83762b4783bd877b6087a568fc Mon Sep 17 00:00:00 2001 From: Shravya Ramesh Date: Thu, 11 Mar 2021 08:14:43 -0800 Subject: Added new endpoint --- src/constants/api.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/constants') diff --git a/src/constants/api.ts b/src/constants/api.ts index 127ef432..dd3d6e15 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -33,12 +33,13 @@ export const DISCOVER_ENDPOINT: string = API_URL + 'discover/'; export const SEARCH_BUTTONS_ENDPOPINT: string = DISCOVER_ENDPOINT + 'search_buttons/'; export const WAITLIST_USER_ENDPOINT: string = API_URL + 'waitlist-user/'; export const COMMENT_THREAD_ENDPOINT: string = API_URL + 'reply/'; -export const ADD_USER_BADGES: string = API_URL + 'suggested_people/add_badges/'; // Suggested People export const SP_USERS_ENDPOINT: string = API_URL + 'suggested_people/'; -export const SP_UPDATE_PICTURE_ENDPOINT: string = API_URL + 'suggested_people/update_picture/'; +export const SP_UPDATE_PICTURE_ENDPOINT: string = SP_USERS_ENDPOINT + 'update_picture/'; export const SP_MUTUAL_BADGE_HOLDERS_ENDPOINT: string = SP_USERS_ENDPOINT + 'get_mutual_badge_holders/'; +export const ADD_USER_BADGES: string = SP_USERS_ENDPOINT + 'add_badges/'; +export const UPDATE_USER_BADGES: string = SP_USERS_ENDPOINT + 'update_badges/'; // Register as FCM device export const FCM_ENDPOINT: string = API_URL + 'fcm/'; -- cgit v1.2.3-70-g09d2 From c74285c0f53efc1c4d0794d2f7f563b45e1eb700 Mon Sep 17 00:00:00 2001 From: Shravya Ramesh Date: Thu, 11 Mar 2021 09:18:16 -0800 Subject: refactoring --- src/constants/api.ts | 4 +- src/screens/badge/BadgeSelection.tsx | 71 +++++----------------------------- src/screens/suggestedPeople/SPBody.tsx | 2 +- src/services/SuggestedPeopleService.ts | 57 ++++++++++++++++++++++++++- 4 files changed, 68 insertions(+), 66 deletions(-) (limited to 'src/constants') diff --git a/src/constants/api.ts b/src/constants/api.ts index dd3d6e15..34ef9a1c 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -38,8 +38,8 @@ export const COMMENT_THREAD_ENDPOINT: string = API_URL + 'reply/'; export const SP_USERS_ENDPOINT: string = API_URL + 'suggested_people/'; export const SP_UPDATE_PICTURE_ENDPOINT: string = SP_USERS_ENDPOINT + 'update_picture/'; export const SP_MUTUAL_BADGE_HOLDERS_ENDPOINT: string = SP_USERS_ENDPOINT + 'get_mutual_badge_holders/'; -export const ADD_USER_BADGES: string = SP_USERS_ENDPOINT + 'add_badges/'; -export const UPDATE_USER_BADGES: string = SP_USERS_ENDPOINT + 'update_badges/'; +export const ADD_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'add_badges/'; +export const UPDATE_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'update_badges/'; // Register as FCM device export const FCM_ENDPOINT: string = API_URL + 'fcm/'; diff --git a/src/screens/badge/BadgeSelection.tsx b/src/screens/badge/BadgeSelection.tsx index 7088821a..ed3f199d 100644 --- a/src/screens/badge/BadgeSelection.tsx +++ b/src/screens/badge/BadgeSelection.tsx @@ -1,4 +1,3 @@ -import AsyncStorage from '@react-native-community/async-storage'; import {RouteProp} from '@react-navigation/core'; import {StackNavigationProp} from '@react-navigation/stack'; import React, {useEffect, useState} from 'react'; @@ -7,17 +6,11 @@ import {Text} from 'react-native-animatable'; import {TouchableOpacity} from 'react-native-gesture-handler'; import LinearGradient from 'react-native-linear-gradient'; import {useDispatch} from 'react-redux'; -import {MainStackParams} from 'src/routes'; -import { - ADD_USER_BADGES, - BACKGROUND_GRADIENT_MAP, - UPDATE_USER_BADGES, -} from '../../constants'; +import {MainStackParams} from '../../routes'; +import {addBadgesService, updateBadgesService} from '../../services'; +import {BACKGROUND_GRADIENT_MAP} from '../../constants'; import {BADGE_DATA} from '../../constants/badges'; -import { - ERROR_BADGES_EXCEED_LIMIT, - ERROR_UPLOAD_BADGES, -} from '../../constants/strings'; +import {ERROR_BADGES_EXCEED_LIMIT} from '../../constants/strings'; import {suggestedPeopleBadgesFinished} from '../../store/actions'; import {BackgroundGradientType, UniversityBadge} from '../../types'; import {SCREEN_HEIGHT, StatusBarHeight} from '../../utils'; @@ -52,11 +45,14 @@ const BadgeSelection: React.FC = ({navigation, route}) => { style={styles.rightButtonContainer} onPress={async () => { if (route?.params.editing) { - updateBadgesService(); + updateBadgesService(selectedBadges); navigation.goBack(); } else { if (selectedBadges.length !== 0) { - uploadUserSelection(); + const success = await addBadgesService(selectedBadges); + if (success) { + dispatch(suggestedPeopleBadgesFinished()); + } } else { dispatch(suggestedPeopleBadgesFinished()); } @@ -103,55 +99,6 @@ const BadgeSelection: React.FC = ({navigation, route}) => { } }; - const uploadUserSelection = async () => { - try { - const token = await AsyncStorage.getItem('token'); - const form = new FormData(); - form.append('badges', JSON.stringify(selectedBadges)); - const response = await fetch(ADD_USER_BADGES, { - method: 'POST', - headers: { - 'Content-Type': 'multipart/form-data', - Authorization: 'Token ' + token, - }, - body: form, - }); - if (response.status === 400) { - Alert.alert(ERROR_BADGES_EXCEED_LIMIT); - return; - } - dispatch(suggestedPeopleBadgesFinished()); - } catch (error) { - console.log(error); - Alert.alert(ERROR_UPLOAD_BADGES); - } - }; - - const updateBadgesService = async () => { - try { - const token = await AsyncStorage.getItem('token'); - const form = new FormData(); - console.log('selectedBadges: ', selectedBadges); - form.append('badges', JSON.stringify(selectedBadges)); - const response = await fetch(UPDATE_USER_BADGES, { - method: 'POST', - headers: { - 'Content-Type': 'multipart/form-data', - Authorization: 'Token ' + token, - }, - body: form, - }); - if (response.status === 400) { - Alert.alert(ERROR_BADGES_EXCEED_LIMIT); - return; - } - console.log('response: ', response); - } catch (error) { - console.log(error); - Alert.alert(ERROR_UPLOAD_BADGES); - } - }; - return ( = ({ let array = []; useEffect(() => { const findBadgeIcons = (badge: UniversityBadge) => { - DATA.forEach((item) => { + DATA?.forEach((item) => { if (item.title === badge.category) { item.data.forEach((object) => { if (object.badgeName === badge.name) { diff --git a/src/services/SuggestedPeopleService.ts b/src/services/SuggestedPeopleService.ts index d0032458..7b0131d8 100644 --- a/src/services/SuggestedPeopleService.ts +++ b/src/services/SuggestedPeopleService.ts @@ -1,11 +1,18 @@ import AsyncStorage from '@react-native-community/async-storage'; import { + ERROR_BADGES_EXCEED_LIMIT, + ERROR_UPLOAD_BADGES, +} from '../constants/strings'; +import { + ADD_BADGES_ENDPOINT, EDIT_PROFILE_ENDPOINT, SP_MUTUAL_BADGE_HOLDERS_ENDPOINT, SP_UPDATE_PICTURE_ENDPOINT, SP_USERS_ENDPOINT, -} from '../constants'; + UPDATE_BADGES_ENDPOINT, +} from '../constants/api'; import {ProfilePreviewType, SuggestedPeopleDataType} from '../types'; +import { Alert } from 'react-native'; export const sendSuggestedPeopleLinked = async ( userId: string, @@ -119,3 +126,51 @@ export const getMutualBadgeHolders = async () => { return undefined; } }; + +export const addBadgesService = async (selectedBadges: string[]) => { + try { + const token = await AsyncStorage.getItem('token'); + const form = new FormData(); + form.append('badges', JSON.stringify(selectedBadges)); + const response = await fetch(ADD_BADGES_ENDPOINT, { + method: 'POST', + headers: { + 'Content-Type': 'multipart/form-data', + Authorization: 'Token ' + token, + }, + body: form, + }); + if (response.status === 400) { + Alert.alert(ERROR_BADGES_EXCEED_LIMIT); + return false; + } + return true; + } catch (error) { + console.log(error); + Alert.alert(ERROR_UPLOAD_BADGES); + return false; + } +}; + +export const updateBadgesService = async (selectedBadges: string[]) => { + try { + const token = await AsyncStorage.getItem('token'); + const form = new FormData(); + form.append('badges', JSON.stringify(selectedBadges)); + const response = await fetch(UPDATE_BADGES_ENDPOINT, { + method: 'POST', + headers: { + 'Content-Type': 'multipart/form-data', + Authorization: 'Token ' + token, + }, + body: form, + }); + if (response.status === 400) { + Alert.alert(ERROR_BADGES_EXCEED_LIMIT); + return; + } + } catch (error) { + console.log(error); + Alert.alert(ERROR_UPLOAD_BADGES); + } +}; -- cgit v1.2.3-70-g09d2 From 803b7a7bcb173d6a263c9d43fec41e5cddfe98f4 Mon Sep 17 00:00:00 2001 From: Shravya Ramesh Date: Thu, 11 Mar 2021 13:36:34 -0800 Subject: done; except: update state on previous screen; --- src/assets/icons/front-arrow.svg | 1 + src/constants/strings.ts | 1 + src/screens/badge/BadgeSelection.tsx | 4 ++- .../SuggestedPeopleUploadPictureScreen.tsx | 32 ++++++++++++---------- src/services/SuggestedPeopleService.ts | 5 ++++ 5 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 src/assets/icons/front-arrow.svg (limited to 'src/constants') diff --git a/src/assets/icons/front-arrow.svg b/src/assets/icons/front-arrow.svg new file mode 100644 index 00000000..7beeb83e --- /dev/null +++ b/src/assets/icons/front-arrow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/constants/strings.ts b/src/constants/strings.ts index 93da6e59..3c2100f4 100644 --- a/src/constants/strings.ts +++ b/src/constants/strings.ts @@ -57,6 +57,7 @@ export const SUCCESS_CATEGORY_DELETE = 'Category successfully deleted, but its m export const SUCCESS_INVITATION_CODE = 'Perfect! You entered a valid invitation code, you are now able to login and explore Tagg!'; export const SUCCESS_LINK = (str: string) => `Successfully linked ${str} 🎉`; export const SUCCESS_PIC_UPLOAD = 'Beautiful, the picture was uploaded successfully!'; +export const SUCCESS_BADGES_UPDATE = 'Badges updated successfully!' export const SUCCESS_PWD_RESET = 'Your password was reset successfully!'; export const SUCCESS_VERIFICATION_CODE_SENT = 'New verification code sent! Check your phone messages for your code'; export const UP_TO_DATE = 'Up-to-Date!'; diff --git a/src/screens/badge/BadgeSelection.tsx b/src/screens/badge/BadgeSelection.tsx index ed3f199d..ba2e6af4 100644 --- a/src/screens/badge/BadgeSelection.tsx +++ b/src/screens/badge/BadgeSelection.tsx @@ -59,7 +59,9 @@ const BadgeSelection: React.FC = ({navigation, route}) => { } }}> - {selectedBadges.length !== 0 ? 'Done' : 'Skip'} + {selectedBadges.length !== 0 || route?.params.editing + ? 'Done' + : 'Skip'} ), diff --git a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx index eb8494f4..c5a4ce61 100644 --- a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx +++ b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx @@ -25,11 +25,12 @@ import { import {uploadedSuggestedPeoplePhoto} from '../../store/actions'; import {RootState} from '../../store/rootReducer'; import {normalize, SCREEN_HEIGHT, SCREEN_WIDTH} from '../../utils'; -import BackArrow from '../../assets/icons/back-arrow.svg'; +import FrontArrow from '../../assets/icons/front-arrow.svg'; const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { const {editing} = route.params; const [image, setImage] = useState(undefined); + const [oldImage, setOldImage] = useState(undefined); const [selectedBadges, setSelectedBadges] = useState([]); const [loading, setLoading] = useState(false); const dispatch = useDispatch(); @@ -44,6 +45,8 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { if (response) { 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 @@ -76,8 +79,8 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { }; const uploadImage = async () => { - setLoading(true); - if (image) { + if (image && oldImage !== image) { + setLoading(true); const success = await sendSuggestedPeoplePhoto(image); if (success) { dispatch(uploadedSuggestedPeoplePhoto(image)); @@ -87,16 +90,15 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { } else { Alert.alert(ERROR_UPLOAD); } + setLoading(false); + // Navigated back to Profile if user is editing their Suggested People Picture + if (editing) { + setTimeout(() => { + Alert.alert(SUCCESS_PIC_UPLOAD); + }, 500); + } } - setLoading(false); - - // Navigated back to Profile if user is editing their Suggested People Picture - if (editing) { - navigation.goBack(); - setTimeout(() => { - Alert.alert(SUCCESS_PIC_UPLOAD); - }, 500); - } + navigation.goBack(); }; return ( @@ -152,9 +154,11 @@ const SuggestedPeopleUploadPictureScreen: React.FC = ({route}) => { { - navigation.push('BadgeSelection', {selectedBadges}); + navigation.push('BadgeSelection', { + selectedBadges, + }); }}> - + )} diff --git a/src/services/SuggestedPeopleService.ts b/src/services/SuggestedPeopleService.ts index 7b0131d8..a65b91ef 100644 --- a/src/services/SuggestedPeopleService.ts +++ b/src/services/SuggestedPeopleService.ts @@ -2,6 +2,7 @@ import AsyncStorage from '@react-native-community/async-storage'; import { ERROR_BADGES_EXCEED_LIMIT, ERROR_UPLOAD_BADGES, + SUCCESS_BADGES_UPDATE, } from '../constants/strings'; import { ADD_BADGES_ENDPOINT, @@ -169,6 +170,10 @@ export const updateBadgesService = async (selectedBadges: string[]) => { Alert.alert(ERROR_BADGES_EXCEED_LIMIT); return; } + if (response.status === 200) { + Alert.alert(SUCCESS_BADGES_UPDATE); + return; + } } catch (error) { console.log(error); Alert.alert(ERROR_UPLOAD_BADGES); -- cgit v1.2.3-70-g09d2 From 1433c44fd4588b9044df83e199a57223b4979446 Mon Sep 17 00:00:00 2001 From: Shravya Ramesh Date: Fri, 12 Mar 2021 12:13:08 -0800 Subject: error message apt --- src/constants/strings.ts | 3 ++- .../SuggestedPeopleUploadPictureScreen.tsx | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src/constants') diff --git a/src/constants/strings.ts b/src/constants/strings.ts index 3c2100f4..f289cfc1 100644 --- a/src/constants/strings.ts +++ b/src/constants/strings.ts @@ -43,10 +43,11 @@ export const ERROR_TWILIO_SERVER_ERROR = 'mhm, looks like that is an invalid pho export const ERROR_UNABLE_TO_FIND_PROFILE = 'We were unable to find this profile. Please check username and try again'; export const ERROR_UNABLE_TO_VIEW_PROFILE = 'Unable to view this profile'; export const ERROR_UPLOAD = 'An error occurred while uploading. Please try again!'; -export const ERROR_UPLOAD_BADGES = 'Unable to upload your badges. Please retry'; +export const ERROR_UPLOAD_BADGES = 'Unable to upload your badges. Please retry!'; export const ERROR_BADGES_EXCEED_LIMIT = 'You can\'t have more than 5 badges!'; export const ERROR_UPLOAD_LARGE_PROFILE_PIC = "Can't have the first image seen on the profile be blank, please upload a large picture"; export const ERROR_UPLOAD_MOMENT = 'Unable to upload moment. Please retry'; +export const ERROR_UPLOAD_SP_PHOTO = 'Unable to update suggested people photo. Please retry!'; export const ERROR_UPLOAD_SMALL_PROFILE_PIC = "Can't have a profile without a pic to represent you, please upload a small profile picture"; export const ERROR_VERIFICATION_FAILED_SHORT = 'Verification failed 😓'; export const MARKED_AS_MSG = (str: string) => `Marked as ${str}`; diff --git a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx index dd97cb6b..4b7250ce 100644 --- a/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx +++ b/src/screens/suggestedPeopleOnboarding/SuggestedPeopleUploadPictureScreen.tsx @@ -16,7 +16,11 @@ import {useDispatch, useSelector} from 'react-redux'; import {TaggSquareButton, UniversityIcon} from '../../components'; import TaggLoadingIndicator from '../../components/common/TaggLoadingIndicator'; import {SP_HEIGHT, SP_WIDTH} from '../../constants'; -import {ERROR_UPLOAD, SUCCESS_PIC_UPLOAD} from '../../constants/strings'; +import { + ERROR_UPLOAD, + ERROR_UPLOAD_SP_PHOTO, + SUCCESS_PIC_UPLOAD, +} from '../../constants/strings'; import { getSuggestedPeopleProfile, sendSuggestedPeoplePhoto, @@ -103,7 +107,7 @@ const SuggestedPeopleUploadPictureScreen: React.FC { - Alert.alert(SUCCESS_PIC_UPLOAD); + Alert.alert(success ? SUCCESS_PIC_UPLOAD : ERROR_UPLOAD_SP_PHOTO); }, 500); } } -- cgit v1.2.3-70-g09d2