import {useNavigation} from '@react-navigation/core'; import React, {useEffect, useState} from 'react'; import {FlatList, Image, Modal, StyleSheet, Text, View} from 'react-native'; import {TouchableOpacity} from 'react-native-gesture-handler'; import LinearGradient from 'react-native-linear-gradient'; import {useDispatch, useSelector} from 'react-redux'; import CloseIcon from '../../assets/ionicons/close-outline.svg'; import {BADGE_GRADIENT_FIRST, BADGE_LIMIT} from '../../constants'; import {removeUserBadge} from '../../store/actions'; import {RootState} from '../../store/rootreducer'; import {ScreenType, UniversityBadgeDisplayType} from '../../types'; import { badgesToDisplayBadges, getUniversityBadge, normalize, } from '../../utils'; interface BadgeDetailModalProps { userXId: string | undefined; screenType: ScreenType; isEditable: boolean; setBadgeViewVisible: Function; userFullName?: string; } const BadgeDetailView: React.FC = ({ userXId, screenType, userFullName, isEditable = true, setBadgeViewVisible, }) => { const dispatch = useDispatch(); const { user, profile: {university, badges}, } = useSelector((state: RootState) => userXId ? state.userX[screenType][userXId] : state.user, ); const navigation = useNavigation(); const [displayBadges, setDisplayBadges] = useState< UniversityBadgeDisplayType[] >([]); const atLimit = badges.length >= BADGE_LIMIT; useEffect(() => { setDisplayBadges(badgesToDisplayBadges(badges, university)); }, [badges]); const removeBadgeCell = async (badgeName: string) => { dispatch(removeUserBadge(badgeName, user.userId)); }; const badgeEditCell = ({ item: {id, name, img}, }: { item: UniversityBadgeDisplayType; }) => { return ( { setBadgeViewVisible(false); navigation.navigate('MutualBadgeHolders', { badge_id: id, badge_title: name, badge_img: img, }); }}> {isEditable && ( { removeBadgeCell(name); }}> )} {name} ); }; const addButton = () => { return ( { setBadgeViewVisible(false); navigation.navigate('BadgeSelection', {editing: true}); }} style={styles.addButtonStyles}> Add Badges ); }; const modalHeader = () => { let heading = ''; let subheading = ''; if (isEditable) { if (atLimit) { heading = 'You have reached your badge limit'; subheading = 'Remove a badge if you wish to add more'; } else { heading = 'Edit your badges!'; subheading = 'Add or delete your badges'; } } else { heading = userFullName!; subheading = 'View badges to discover groups!'; } return ( {heading} {subheading} ); }; const _modalContent = () => { return ( setBadgeViewVisible(false)}> {modalHeader()} item.id.toString()} /> {isEditable && addButton()} ); }; return ( {_modalContent()} ); }; const styles = StyleSheet.create({ badgeCellContainerStyles: { alignItems: 'center', justifyContent: 'center', paddingVertical: 10, }, badgeCellImageContainerStyles: { flexDirection: 'row', marginLeft: 25, }, badgeImageStyles: { width: '50%', height: '50%', alignSelf: 'center', }, badgeCellImageNoEditContainerStyles: { flexDirection: 'row', marginHorizontal: 25, }, badgeCellImageStyles: { borderRadius: 50, width: 70, height: 70, justifyContent: 'center', }, badgeCellTextStyles: { fontWeight: '600', fontSize: normalize(12), lineHeight: normalize(16), textAlign: 'center', }, userNameContainerStyles: {marginTop: 10}, crossButtonStyles: {marginTop: 10, marginLeft: 10}, addButtonStyles: { height: 40, borderRadius: 5, marginBottom: 45, width: '40%', marginTop: 14, alignItems: 'center', justifyContent: 'center', alignSelf: 'center', backgroundColor: '#698DD3', }, addButtonTextStyles: {color: 'white'}, modalHeadingStyles: { fontWeight: '600', fontSize: normalize(17), lineHeight: normalize(20.29), textAlign: 'center', marginVertical: normalize(10), marginTop: normalize(20), }, modalSubheadingStyles: { fontWeight: '600', fontSize: normalize(11), lineHeight: normalize(15), textAlign: 'center', color: '#828282', }, modalUpperContainerStyles: { flexDirection: 'row', alignItems: 'flex-start', }, modalImageContainerStyles: { flex: 1, justifyContent: 'center', alignItems: 'center', height: 50, }, modalImageStyles: { left: -15, top: -10, width: 62, height: 70, marginBottom: 10, }, modalListStyles: { alignSelf: 'center', marginVertical: 35, }, viewWrapper: { flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: 'rgba(0, 0, 0, 0.2)', }, modalView: { width: '95%', backgroundColor: '#fff', borderRadius: 7, }, }); export default BadgeDetailView;