diff options
Diffstat (limited to 'src/screens')
-rw-r--r-- | src/screens/onboarding/Checkpoint.tsx | 11 | ||||
-rw-r--r-- | src/screens/onboarding/ProfileOnboarding.tsx | 26 | ||||
-rw-r--r-- | src/screens/onboarding/SocialMedia.tsx | 180 | ||||
-rw-r--r-- | src/screens/onboarding/index.ts | 1 |
4 files changed, 195 insertions, 23 deletions
diff --git a/src/screens/onboarding/Checkpoint.tsx b/src/screens/onboarding/Checkpoint.tsx index 8ef7f307..aae2293e 100644 --- a/src/screens/onboarding/Checkpoint.tsx +++ b/src/screens/onboarding/Checkpoint.tsx @@ -30,14 +30,11 @@ interface CheckpointProps { const Checkpoint: React.FC<CheckpointProps> = ({route, navigation}) => { const {userId, username} = route.params; - /** - * login: determines if user successully created an account to - * navigate to home and display main tab navigation bar - */ - const {login} = React.useContext(AuthContext); - const handleSkip = () => { - login(userId, username); + navigation.navigate('SocialMedia', { + userId: userId, + username: username, + }); }; const handleProceed = () => { diff --git a/src/screens/onboarding/ProfileOnboarding.tsx b/src/screens/onboarding/ProfileOnboarding.tsx index e13ccc5a..7e489d6d 100644 --- a/src/screens/onboarding/ProfileOnboarding.tsx +++ b/src/screens/onboarding/ProfileOnboarding.tsx @@ -47,7 +47,10 @@ interface ProfileOnboardingProps { * @param navigation react-navigation navigation object */ -const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({route}) => { +const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({ + route, + navigation, +}) => { const {userId, username} = route.params; const [form, setForm] = React.useState({ largePic: '', @@ -97,12 +100,6 @@ const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({route}) => { }; /** - * login: determines if user successully created an account to - * navigate to home and display main tab navigation bar - */ - const {login} = React.useContext(AuthContext); - - /** * Profile screen "Add Large Profile Pic Here" button */ const LargeProfilePic = () => ( @@ -112,10 +109,7 @@ const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({route}) => { onPress={goToGalleryLargePic} style={styles.largeProfileUploader}> {form.largePic ? ( - <Image - source={{uri: form.largePic}} - style={styles.largeProfilePic} - /> + <Image source={{uri: form.largePic}} style={styles.largeProfilePic} /> ) : ( <Text style={styles.largeProfileText}>ADD LARGE PROFILE PIC HERE</Text> )} @@ -132,10 +126,7 @@ const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({route}) => { onPress={goToGallerySmallPic} style={styles.smallProfileUploader}> {form.smallPic ? ( - <Image - source={{uri: form.smallPic}} - style={styles.smallProfilePic} - /> + <Image source={{uri: form.smallPic}} style={styles.smallProfilePic} /> ) : ( <Text style={styles.smallProfileText}>ADD SMALLER PIC</Text> )} @@ -328,7 +319,10 @@ const ProfileOnboarding: React.FC<ProfileOnboardingProps> = ({route}) => { let statusCode = response.status; let data = await response.json(); if (statusCode === 200) { - login(userId, username); + navigation.navigate('SocialMedia', { + userId: userId, + username: username, + }); } else if (statusCode === 400) { Alert.alert( 'Profile update failed. 😔', diff --git a/src/screens/onboarding/SocialMedia.tsx b/src/screens/onboarding/SocialMedia.tsx new file mode 100644 index 00000000..868368e3 --- /dev/null +++ b/src/screens/onboarding/SocialMedia.tsx @@ -0,0 +1,180 @@ +import React from 'react'; +import { + StyleSheet, + View, + TouchableOpacity, + Text, + StatusBar, + KeyboardAvoidingView, + Platform, + Alert, +} from 'react-native'; +import { + Background, + RegistrationWizard, + LinkSocialMedia, +} from '../../components'; +import {LinkerType} from 'src/types'; +import {SOCIAL_LIST} from '../../constants/'; +import {OnboardingStackParams, AuthContext} from '../../routes'; +import {RouteProp} from '@react-navigation/native'; +import {StackNavigationProp} from '@react-navigation/stack'; + +/** + * Social Media Screen for displaying social media linkers + */ + +type SocialMediaRouteProps = RouteProp<OnboardingStackParams, 'SocialMedia'>; + +type SocialMediaNavigationProp = StackNavigationProp< + OnboardingStackParams, + 'SocialMedia' +>; + +interface SocialMediaProps { + route: SocialMediaRouteProps; + navigation: SocialMediaNavigationProp; +} + +const SocialMedia: React.FC<SocialMediaProps> = ({route, navigation}) => { + const {userId, username} = route.params; + const linkers: Array<LinkerType> = []; + const [state, setState] = React.useState({ + showMore: false, + }); + + /** + * login: determines if user successully created an account to + * navigate to home and display main tab navigation bar + */ + const {login} = React.useContext(AuthContext); + + // let numSocials: Number = state.showMore ? 9 : 3; + + for (let i = 0; i < SOCIAL_LIST.length; i++) { + let linker: LinkerType = { + label: SOCIAL_LIST[i], + }; + linkers.push(linker); + } + + /** + * Just commenting this out, in case we need it in the future + */ + // const handleShowPress = () => { + // setState({ + // ...state, + // showMore: !state.showMore, + // }); + // }; + + const handleLogin = () => { + try { + login(userId, username); + } catch (error) { + console.log(error); + Alert.alert('There was a problem logging you in'); + } + }; + + return ( + <Background style={styles.container}> + <StatusBar barStyle="light-content" /> + <RegistrationWizard style={styles.wizard} step="seven" /> + <KeyboardAvoidingView + behavior={Platform.OS === 'ios' ? 'padding' : 'height'} + style={styles.container}> + <View style={{marginBottom: '30%'}}> + <Text style={styles.header}>SOCIAL MEDIA</Text> + <Text style={styles.subtext}> + Select the social media you want to add + </Text> + </View> + <View style={styles.linkerContainer}> + {linkers.map((linker, index) => ( + <LinkSocialMedia key={index} social={linker} /> + ))} + </View> + </KeyboardAvoidingView> + <TouchableOpacity onPress={handleLogin} style={styles.loginButton}> + <Text style={styles.loginButtonLabel}>Login</Text> + </TouchableOpacity> + </Background> + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + }, + linkerContainer: { + position: 'relative', + bottom: '15%', + flexDirection: 'row', + height: '25%', + flexWrap: 'wrap', + justifyContent: 'center', + alignContent: 'center', + marginBottom: '10%', + }, + header: { + color: '#fff', + fontSize: 22, + fontWeight: '600', + textAlign: 'center', + marginBottom: '4%', + marginHorizontal: '10%', + }, + subtext: { + color: '#fff', + fontSize: 14, + fontWeight: '600', + textAlign: 'center', + marginBottom: '35%', + marginHorizontal: '10%', + }, + // show: { + // borderColor: '#fff', + // borderWidth: 1, + // borderRadius: 3, + // paddingHorizontal: '2%', + // paddingVertical: '1%', + // marginVertical: '3%', + // marginLeft: '65%', + // }, + wizard: { + ...Platform.select({ + ios: { + top: 50, + }, + android: { + bottom: 40, + }, + }), + }, + loginButton: { + backgroundColor: '#8F01FF', + justifyContent: 'center', + alignItems: 'center', + width: 150, + height: 40, + borderRadius: 5, + borderWidth: 1, + borderColor: '#8F01FF', + marginBottom: '15%', + }, + loginButtonLabel: { + fontSize: 16, + fontWeight: '500', + color: '#ddd', + }, + form: { + alignItems: 'center', + justifyContent: 'flex-start', + flex: 3, + }, +}); + +export default SocialMedia; diff --git a/src/screens/onboarding/index.ts b/src/screens/onboarding/index.ts index 27a33d32..d8ae7644 100644 --- a/src/screens/onboarding/index.ts +++ b/src/screens/onboarding/index.ts @@ -7,3 +7,4 @@ export {default as Checkpoint} from './Checkpoint'; export {default as ProfileOnboarding} from './ProfileOnboarding'; export {default as Splash} from './Splash'; export {default as InvitationCodeVerification} from './InvitationCodeVerification'; +export {default as SocialMedia} from './SocialMedia'; |