diff options
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/profile/ProfileBadges.tsx | 98 |
1 files changed, 82 insertions, 16 deletions
diff --git a/src/components/profile/ProfileBadges.tsx b/src/components/profile/ProfileBadges.tsx index 13e775f7..39e84705 100644 --- a/src/components/profile/ProfileBadges.tsx +++ b/src/components/profile/ProfileBadges.tsx @@ -1,12 +1,15 @@ +import {useNavigation} from '@react-navigation/core'; import React, {useEffect, useState} from 'react'; -import {Alert, StyleSheet, Text, View} from 'react-native'; -import {ScrollView} from 'react-native-gesture-handler'; +import {StyleSheet, Text, View} from 'react-native'; +import {ScrollView, TouchableOpacity} from 'react-native-gesture-handler'; import {useSelector} from 'react-redux'; import {BadgeIcon} from '..'; import PlusIcon from '../../assets/icons/plus_icon-01.svg'; +import {BADGE_LIMIT} from '../../constants'; import {RootState} from '../../store/rootReducer'; import {ScreenType, UniversityBadgeDisplayType} from '../../types'; import {badgesToDisplayBadges, normalize} from '../../utils'; +import BadgeDetailView from '../common/BadgeDetailView'; interface ProfileBadgesProps { userXId: string | undefined; @@ -14,12 +17,14 @@ interface ProfileBadgesProps { } const ProfileBadges: React.FC<ProfileBadgesProps> = ({userXId, screenType}) => { - const {badges} = useSelector((state: RootState) => + const navigation = useNavigation(); + const {badges, name} = useSelector((state: RootState) => userXId ? state.userX[screenType][userXId].profile : state.user.profile, ); const [displayBadges, setDisplayBadges] = useState< UniversityBadgeDisplayType[] >([]); + const [isEditBadgeModalVisible, setIsEditBadgeModalVisible] = useState(false); useEffect(() => { setDisplayBadges(badgesToDisplayBadges(badges)); @@ -27,6 +32,7 @@ const ProfileBadges: React.FC<ProfileBadgesProps> = ({userXId, screenType}) => { return ( <> + {/* Tutorial text */} {displayBadges.length === 0 && ( <> <Text style={styles.title}>Badges</Text> @@ -36,24 +42,81 @@ const ProfileBadges: React.FC<ProfileBadgesProps> = ({userXId, screenType}) => { </> )} {displayBadges.length === 0 ? ( - <ScrollView contentContainerStyle={styles.badgeContainer} horizontal> - <PlusIcon - width={normalize(31)} - height={normalize(31)} - color={'black'} - onPress={() => Alert.alert('fooo')} - /> - {[0, 0, 0, 0, 0].map(() => ( - <View style={styles.greyCircle} /> - ))} + // Grey circle placeholders + <ScrollView + contentContainerStyle={styles.badgeContainer} + scrollEnabled={false} + horizontal> + <TouchableOpacity + onPress={() => + navigation.navigate('BadgeSelection', {editing: true}) + }> + <PlusIcon + width={normalize(31)} + height={normalize(31)} + color={'black'} + style={{transform: [{scale: 1.2}]}} + /> + </TouchableOpacity> + {Array(BADGE_LIMIT) + .fill(0) + .map(() => ( + <View style={[styles.grey, styles.circle]} /> + ))} </ScrollView> ) : ( - <ScrollView contentContainerStyle={styles.badgeContainer} horizontal> + // Populating actual badges + <ScrollView + contentContainerStyle={styles.badgeContainer} + scrollEnabled={false} + horizontal> + {/* Actual badges */} {displayBadges.map((displayBadge) => ( <BadgeIcon key={displayBadge.id} badge={displayBadge} /> ))} + {/* Plus icon */} + {displayBadges.length < BADGE_LIMIT && ( + <TouchableOpacity + onPress={() => + navigation.navigate('BadgeSelection', {editing: true}) + }> + <PlusIcon + width={normalize(31)} + height={normalize(31)} + color={'black'} + style={{transform: [{scale: 1.2}]}} + /> + </TouchableOpacity> + )} + {/* Empty placeholders for space-between styling */} + {Array(BADGE_LIMIT + 1) + .fill(0) + .splice(displayBadges.length + 1, BADGE_LIMIT) + .map(() => ( + <View style={styles.circle} /> + ))} + {/* X button */} + {displayBadges.length === BADGE_LIMIT && ( + <TouchableOpacity onPress={() => setIsEditBadgeModalVisible(true)}> + <PlusIcon + width={normalize(31)} + height={normalize(31)} + color={'grey'} + style={{transform: [{scale: 1.2}, {rotate: '45deg'}]}} + /> + </TouchableOpacity> + )} </ScrollView> )} + {isEditBadgeModalVisible && ( + <BadgeDetailView + userXId={userXId} + screenType={screenType} + isEditable={userXId === undefined} + userFullName={name} + setBadgeViewVisible={setIsEditBadgeModalVisible} + /> + )} </> ); }; @@ -67,16 +130,19 @@ const styles = StyleSheet.create({ body: { fontSize: normalize(13.5), lineHeight: normalize(17), + marginBottom: 10, }, badgeContainer: { width: '100%', - borderWidth: 1, justifyContent: 'space-between', + marginBottom: 15, }, - greyCircle: { + circle: { width: normalize(31), height: normalize(31), borderRadius: normalize(31) / 2, + }, + grey: { backgroundColor: '#c4c4c4', }, }); |