From 199bc75f5539532d6107dadfcfe086d830cbdcfb Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Wed, 12 May 2021 14:36:27 -0400 Subject: added 17 badges --- src/constants/badges.ts | 110 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 105 insertions(+), 5 deletions(-) (limited to 'src/constants') diff --git a/src/constants/badges.ts b/src/constants/badges.ts index aca53f26..54979ecd 100644 --- a/src/constants/badges.ts +++ b/src/constants/badges.ts @@ -1,7 +1,7 @@ import {BadgeDataType} from '../types'; export const _badgeImages = { - iff: require('../assets/badges/iff.png'), + aap: require('../assets/badges/aap.png'), acacia: require('../assets/badges/acacia.png'), acapella: require('../assets/badges/acapella.png'), alpha_chi_omega: require('../assets/badges/alpha_chi_omega.png'), @@ -26,8 +26,15 @@ export const _badgeImages = { brown_womens_collective: require('../assets/badges/brown_womens_collective.png'), bsu: require('../assets/badges/bsu.png'), buxton_international: require('../assets/badges/buxton_international.png'), + cals: require('../assets/badges/cals.png'), chi_phi: require('../assets/badges/chi_phi.png'), chi_psi: require('../assets/badges/chi_psi.png'), + college_of_arts_and_sciences: require('../assets/badges/college_of_arts_and_sciences.png'), + college_of_engineering: require('../assets/badges/college_of_engineering.png'), + college_of_human_ecology: require('../assets/badges/college_of_human_ecology.png'), + college_of_veterinary_medicine: require('../assets/badges/college_of_veterinary_medicine.png'), + cornell_law_school: require('../assets/badges/cornell_law_school.png'), + cornell_tech: require('../assets/badges/cornell_tech.png'), delta_chi: require('../assets/badges/delta_chi.png'), delta_delta_delta: require('../assets/badges/delta_delta_delta.png'), delta_gamma: require('../assets/badges/delta_gamma.png'), @@ -36,13 +43,19 @@ export const _badgeImages = { delta_tau: require('../assets/badges/delta_tau.png'), delta_tau_delta: require('../assets/badges/delta_tau_delta.png'), delta_upsilon: require('../assets/badges/delta_upsilon.png'), + dyson_school: require('../assets/badges/dyson_school.png'), + entrepreneurship_at_cornell: require('../assets/badges/entrepreneurship_at_cornell.png'), fashion_at_brown: require('../assets/badges/fashion_at_brown.png'), fencing: require('../assets/badges/fencing.png'), field_hockey: require('../assets/badges/field_hockey.png'), football: require('../assets/badges/football.png'), golf: require('../assets/badges/golf.png'), + graduate_school: require('../assets/badges/graduate_school.png'), gymnastics: require('../assets/badges/gymnastics.png'), hockey: require('../assets/badges/hockey.png'), + hotel_administration: require('../assets/badges/hotel_administration.png'), + iff: require('../assets/badges/iff.png'), + ilr: require('../assets/badges/ilr.png'), impulse_and_mezcla: require('../assets/badges/impulse_and_mezcla.png'), kappa_alpha_theta: require('../assets/badges/kappa_alpha_theta.png'), kappa_delta: require('../assets/badges/kappa_delta.png'), @@ -69,6 +82,7 @@ export const _badgeImages = { polo: require('../assets/badges/polo.png'), rowing: require('../assets/badges/rowing.png'), sailing: require('../assets/badges/sailing.png'), + sc_johnson_school_of_management: require('../assets/badges/sc_johnson_school_of_management.png'), sigma_alpha_mu: require('../assets/badges/sigma_alpha_mu.png'), sigma_chi: require('../assets/badges/sigma_chi.png'), sigma_delta_tau: require('../assets/badges/sigma_delta_tau.png'), @@ -77,6 +91,7 @@ export const _badgeImages = { soccer: require('../assets/badges/soccer.png'), softball: require('../assets/badges/softball.png'), squash: require('../assets/badges/squash.png'), + student_agencies: require('../assets/badges/student_agencies.png'), swimming_and_diving: require('../assets/badges/swimming_and_diving.png'), tap: require('../assets/badges/tap.png'), tennis: require('../assets/badges/tennis.png'), @@ -86,6 +101,8 @@ export const _badgeImages = { track_and_field: require('../assets/badges/track_and_field.png'), ucs: require('../assets/badges/ucs.png'), volleyball: require('../assets/badges/volleyball.png'), + weill_cornell_medical_sciences: require('../assets/badges/weill_cornell_medical_sciences.png'), + weill_cornell_medicine: require('../assets/badges/weill_cornell_medicine.png'), women_in_business: require('../assets/badges/women_in_business.png'), wrestling: require('../assets/badges/wrestling.png'), zeta_beta_tau: require('../assets/badges/zeta_beta_tau.png'), @@ -243,14 +260,14 @@ const _brownUniversityBadges = [ badgeName: 'Fashion @ brown', badgeImage: _badgeImages.fashion_at_brown, }, - { - badgeName: 'Impulse', - badgeImage: _badgeImages.impulse_and_mezcla, - }, { badgeName: 'Ivy Film Festival ', badgeImage: _badgeImages.iff, }, + { + badgeName: 'Impulse', + badgeImage: _badgeImages.impulse_and_mezcla, + }, ], }, { @@ -629,6 +646,89 @@ const _cornellUniversityBadges = [ }, ], }, + { + title: 'School', + data: [ + { + badgeName: 'College of Agriculture and Life Sciences or (CALS)', + badgeImage: _badgeImages.cals, + }, + { + badgeName: 'College of Architecture, Art and Planning or (AAP)', + badgeImage: _badgeImages.aap, + }, + { + badgeName: 'College of Arts and Sciences ', + badgeImage: _badgeImages.college_of_arts_and_sciences, + }, + { + badgeName: 'Hotel Administration ', + badgeImage: _badgeImages.hotel_administration, + }, + { + badgeName: 'Dyson School', + badgeImage: _badgeImages.dyson_school, + }, + { + badgeName: 'College of Engineering ', + badgeImage: _badgeImages.college_of_engineering, + }, + { + badgeName: 'College of Human Ecology', + badgeImage: _badgeImages.college_of_human_ecology, + }, + { + badgeName: 'School of Industrial and Labor Relations or ILR', + badgeImage: _badgeImages.ilr, + }, + ], + }, + { + title: 'Graduate Program', + data: [ + { + badgeName: 'SC Johnson School of Management', + badgeImage: _badgeImages.sc_johnson_school_of_management, + }, + { + badgeName: 'Conrell Tech (NYC)', + badgeImage: _badgeImages.cornell_tech, + }, + { + badgeName: 'Cornell Law School', + badgeImage: _badgeImages.cornell_law_school, + }, + { + badgeName: 'College of Veterinary Medicine', + badgeImage: _badgeImages.college_of_veterinary_medicine, + }, + { + badgeName: 'Graduate School', + badgeImage: _badgeImages.graduate_school, + }, + { + badgeName: 'Weill Cornell Medicine (NYC)', + badgeImage: _badgeImages.weill_cornell_medicine, + }, + { + badgeName: 'Weill Cornell Medical Sciences (NYC)', + badgeImage: _badgeImages.weill_cornell_medical_sciences, + }, + ], + }, + { + title: 'Network', + data: [ + { + badgeName: 'Entrepreneurship @ Cornell ', + badgeImage: _badgeImages.entrepreneurship_at_cornell, + }, + { + badgeName: 'Student Agencies, INC', + badgeImage: _badgeImages.student_agencies, + }, + ], + }, ]; export const BADGE_DATA: BadgeDataType = { -- cgit v1.2.3-70-g09d2 From 3cfad768bc7d2369ff49d1b57771ac317dbae71e Mon Sep 17 00:00:00 2001 From: George Rusu Date: Wed, 12 May 2021 18:10:08 -0700 Subject: added functionality for individual sms for invites and updated api and strings to match --- src/components/friends/InviteFriendTile.tsx | 86 +++++++++++++++++++++++++---- src/constants/api.ts | 5 +- src/constants/strings.ts | 6 ++ src/services/UserProfileService.ts | 2 +- 4 files changed, 84 insertions(+), 15 deletions(-) (limited to 'src/constants') diff --git a/src/components/friends/InviteFriendTile.tsx b/src/components/friends/InviteFriendTile.tsx index 5237389a..9967b365 100644 --- a/src/components/friends/InviteFriendTile.tsx +++ b/src/components/friends/InviteFriendTile.tsx @@ -1,17 +1,27 @@ +import AsyncStorage from '@react-native-community/async-storage'; import React, {useEffect, useState} from 'react'; import { Alert, + Linking, StyleSheet, Text, TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native'; -import {TAGG_LIGHT_BLUE} from '../../constants'; +import {useSelector} from 'react-redux'; +import {RootState} from 'src/store/rootReducer'; +import { + CREATE_INVITE_CODE, + GET_REMAINING_INVITES, + TAGG_LIGHT_BLUE, +} from '../../constants'; import { ERROR_NO_CONTACT_INVITE_LEFT, ERROR_SOMETHING_WENT_WRONG, - SUCCESS_INVITE_CONTACT, + INVITE_USER_SMS_BODY, + SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE, + SUCCESS_CONFIRM_INVITE_CONTACT_TITLE, SUCCESS_LAST_CONTACT_INVITE, } from '../../constants/strings'; import {InviteContactType} from '../../screens/profile/InviteFriendsScreen'; @@ -24,26 +34,78 @@ interface InviteFriendTileProps { const InviteFriendTile: React.FC = ({item}) => { const [invited, setInvited] = useState(false); + const {name} = useSelector((state: RootState) => state.user.profile); const [formatedPhoneNumber, setFormattedPhoneNumber] = useState(''); const handleInviteFriend = async () => { - const invites_left = await inviteFriendService( - item.phoneNumber, - item.firstName, - item.lastName, - ); + const invites_left = await getRemainingInviteCount(); if (invites_left > 0) { setInvited(true); - Alert.alert(SUCCESS_INVITE_CONTACT(invites_left)); - } else if (invites_left === 0) { - setInvited(true); - Alert.alert(SUCCESS_LAST_CONTACT_INVITE); - } else if (invites_left === -1) { + Alert.alert( + SUCCESS_CONFIRM_INVITE_CONTACT_TITLE(invites_left), + SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE, + [ + {text: 'No!', style: 'cancel'}, + { + text: 'Yes!', + onPress: async () => { + const inviteCode = await handleCreateInviteCode(); + await inviteFriendService( + item.phoneNumber, + item.firstName, + item.lastName, + ); + Linking.openURL( + `sms:${item.phoneNumber}&body=${INVITE_USER_SMS_BODY( + item.firstName, + name, + inviteCode, + )}`, + ); + if (invites_left === 1) { + Alert.alert(SUCCESS_LAST_CONTACT_INVITE); + } + }, + }, + ], + ); + } else if (invites_left === -1 || invites_left === 0) { Alert.alert(ERROR_NO_CONTACT_INVITE_LEFT); } else { Alert.alert(ERROR_SOMETHING_WENT_WRONG); } }; + const getRemainingInviteCount = async () => { + const firstName = name.split(' ')[0]; + const lastName = name.split(' ')[1]; + const token = await AsyncStorage.getItem('token'); + const response = await fetch(GET_REMAINING_INVITES, { + method: 'POST', + headers: { + Authorization: 'Token ' + token, + }, + body: JSON.stringify({ + invitee_first_name: firstName, + invitee_last_name: lastName, + }), + }); + if (response.status === 200) { + const data = await response.json(); + return data.invites_left; + } else if (response.status === 500) { + return -1; + } + }; + + const handleCreateInviteCode = async () => { + const response = await fetch(CREATE_INVITE_CODE, {method: 'POST'}); + if (response.status === 200) { + const data = await response.json(); + return data.code; + } else if (response.status === 500) { + return -1; + } + }; useEffect(() => { const formatPhoneNumer = () => { const unformatted_number: string = item.phoneNumber; diff --git a/src/constants/api.ts b/src/constants/api.ts index e5ce9e77..41c54d6f 100644 --- a/src/constants/api.ts +++ b/src/constants/api.ts @@ -49,7 +49,8 @@ export const USERS_FROM_CONTACTS_ENDPOINT: string = API_URL + 'user_contacts/find_friends/'; export const INVITE_FRIEND_ENDPOINT: string = API_URL + 'user_contacts/invite_friend/'; - +export const CREATE_INVITE_CODE = API_URL + 'create-code/'; +export const GET_REMAINING_INVITES = API_URL + 'user_contacts/check_invite_count/' // Suggested People export const SP_USERS_ENDPOINT: string = API_URL + 'suggested_people/'; export const SP_UPDATE_PICTURE_ENDPOINT: string = @@ -59,7 +60,7 @@ export const SP_MUTUAL_BADGE_HOLDERS_ENDPOINT: string = export const ADD_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'add_badges/'; export const UPDATE_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'update_badges/'; - export const REMOVE_BADGES_ENDPOINT: string = +export const REMOVE_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'remove_badges/'; export const GET_USER_BADGES_ENDPOINT: string = SP_USERS_ENDPOINT + 'get_badges/'; diff --git a/src/constants/strings.ts b/src/constants/strings.ts index 56d54d39..2ce64aed 100644 --- a/src/constants/strings.ts +++ b/src/constants/strings.ts @@ -2,6 +2,7 @@ // Below is the regex to convert this into a csv for the Google Sheet // export const (.*) = .*?(['|"|`])(.*)\2; // replace with: $1\t$3 +export const APP_STORE_LINK = 'https://apps.apple.com/us/app/tagg-discover-your-community/id1537853613' export const ADD_COMMENT_TEXT = (username?: string) => username ? `Reply to ${username}` : 'Add a comment...' export const COMING_SOON_MSG = 'Creating more fun things for you, surprises coming soon 😉'; export const ERROR_ATTEMPT_EDIT_SP = 'Can\'t let you do that yet! Please onboard Suggested People first!'; @@ -68,6 +69,11 @@ export const SUCCESS_BADGES_UPDATE = 'Badges updated successfully!' export const SUCCESS_CATEGORY_DELETE = 'Category successfully deleted, but its memory will live on'; export const SUCCESS_INVITATION_CODE = 'Welcome to Tagg!'; export const SUCCESS_INVITE_CONTACT = (str: string) => `Success! You now have ${str} invites left!`; +export const SUCCESS_CONFIRM_INVITE_CONTACT_TITLE = (str: string) => `You have ${str} invites left!`; +export const SUCCESS_CONFIRM_INVITE_CONTACT_MESSAGE = 'Use one now?'; +export const INVITE_USER_SMS_BODY = (invitedUserName: string, invitee: string, inviteCode: string) => `Hey ${invitedUserName}!\n +You've been tagged by ${invitee}. Follow the instructions below to skip the line and join them on Tagg!\n +Sign up and use this code to get in: ${inviteCode}\n ${APP_STORE_LINK}`; export const SUCCESS_LAST_CONTACT_INVITE = 'Done! That was your last invite, hope you used it wisely!'; export const SUCCESS_LINK = (str: string) => `Successfully linked ${str} 🎉`; export const SUCCESS_PIC_UPLOAD = 'Beautiful, the picture was uploaded successfully!'; diff --git a/src/services/UserProfileService.ts b/src/services/UserProfileService.ts index 8b7b78e1..624f0e2a 100644 --- a/src/services/UserProfileService.ts +++ b/src/services/UserProfileService.ts @@ -442,7 +442,7 @@ export const verifyExistingInformation = async ( const form = new FormData(); if (email) { form.append('email', email); - } + } if (username) { form.append('username', username); } -- cgit v1.2.3-70-g09d2