import {useNavigation} from '@react-navigation/core'; import React, {FC, useEffect, useState} from 'react'; import {StyleSheet, Text, View} from 'react-native'; import {ScrollView, TouchableOpacity} from 'react-native-gesture-handler'; import {useSelector} from 'react-redux'; import {BadgeIcon} from '..'; import PlusIconImage from '../../assets/icons/plus-icon-thin.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; screenType: ScreenType; } const ProfileBadges: React.FC = ({userXId, screenType}) => { const navigation = useNavigation(); const {badges, name, university} = useSelector((state: RootState) => userXId ? state.userX[screenType][userXId].profile : state.user.profile, ); const [displayBadges, setDisplayBadges] = useState< UniversityBadgeDisplayType[] >([]); const [isEditBadgeModalVisible, setIsEditBadgeModalVisible] = useState(false); const isOwnProfile = userXId === undefined; useEffect(() => { setDisplayBadges(badgesToDisplayBadges(badges, university)); }, [badges]); const PlusIcon: FC = () => ( navigation.navigate('BadgeSelection', {editing: true})}> ); const CloseIcon: FC = () => ( setIsEditBadgeModalVisible(true)}> ); return ( <> {/* Tutorial text */} {displayBadges.length === 0 && isOwnProfile && ( <> Badges Proudly represent your team, club, or organization! )} {displayBadges.length === 0 && isOwnProfile && ( // Grey circle placeholders {Array(BADGE_LIMIT) .fill(0) .map((_item, index) => ( ))} )} {displayBadges.length !== 0 && ( // Populating actual badges {/* Actual badges */} {displayBadges.map((displayBadge) => ( ))} {/* Plus icon */} {displayBadges.length < BADGE_LIMIT && isOwnProfile && } {/* Empty placeholders for space-between styling */} {Array(BADGE_LIMIT + 1) .fill(0) .splice(displayBadges.length + 1, BADGE_LIMIT) .map((_item, index) => ( ))} {/* X button */} {displayBadges.length === BADGE_LIMIT && isOwnProfile && ( )} )} {isEditBadgeModalVisible && ( )} ); }; const styles = StyleSheet.create({ title: { fontWeight: '600', fontSize: normalize(13.5), lineHeight: normalize(18), }, body: { fontSize: normalize(13.5), lineHeight: normalize(17), marginBottom: 10, }, badgeContainer: { width: '100%', justifyContent: 'space-between', marginTop: 10, marginBottom: 15, }, circle: { width: normalize(31), height: normalize(31), borderRadius: normalize(31) / 2, }, grey: { backgroundColor: '#c4c4c4', }, plus: { width: normalize(31), height: normalize(31), color: 'black', }, close: { width: normalize(31), height: normalize(31), color: 'grey', transform: [{rotate: '45deg'}], }, }); export default ProfileBadges;