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} from '../../constants'; import {BADGE_DATA} from '../../constants/badges'; import {RootState} from '../../store/rootreducer'; import {ScreenType} from '../../types'; import {getUniversityBadge, normalize, removeUserBadge} 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 [selectedBadgesWithImage, setSelectedBadgesWithImage] = useState( [], ); useEffect(() => { let badgesWithImage = []; badges.forEach((e) => { const uniData = BADGE_DATA[e.university]; const categoryData = uniData.filter((u) => { return u.title === e.category; }); const badgeData = categoryData[0].data.filter((c) => { return c.badgeName === e.name; }); badgeData.forEach((c) => { const obj = {...e, badgeImage: c.badgeImage}; badgesWithImage.push(obj); }); }); setTimeout(() => { setSelectedBadgesWithImage(badgesWithImage); }, 250); }, [badges]); const removeBadgeCell = async (badgeName: string) => { await removeUserBadge(badges, badgeName, user.userId, dispatch); }; const badgeEditCell = ({item: {id, name, badgeImage}}) => { return ( { setBadgeViewVisible(false); navigation.navigate('MutualBadgeHolders', { badge_id: id, badge_title: name, badge_img: badgeImage, }); }}> {isEditable && ( { removeBadgeCell(name); }}> )} {name} ); }; const addButton = () => { return ( { setBadgeViewVisible(false); navigation.navigate('BadgeSelection', {editing: true}); }} style={styles.addButtonStyles}> Add Badges ); }; const modalHeader = () => { const heading = isEditable ? 'Edit your badges!' : userFullName; const subheading = isEditable ? 'Add or delete your badges' : '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', }, 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;