import {useNavigation} from '@react-navigation/native'; import React, {useEffect, useState} from 'react'; import {Image, StyleSheet} from 'react-native'; import {TouchableOpacity} from 'react-native-gesture-handler'; import LinearGradient from 'react-native-linear-gradient'; import Animated, {Easing} from 'react-native-reanimated'; import {UniversityType, UniversityBadge} from '../../types'; import {UniversityIcon} from '..'; import {normalize, SCREEN_WIDTH} from '../../utils'; import UniversityIconClicked from './UniversityIconClicked'; interface BadgesDropdownProps { university: UniversityType; localBadges: { badge: UniversityBadge; img: string; }[]; badges: UniversityBadge[]; } const BadgesDropdown: React.FC = ({ university, localBadges, badges, }) => { // Used to toggle between dropdown being displayed and not const [displayBadges, setDisplayBadges] = useState(false); // Determines the absolute position of the individual badges [0, i * 40] let [top, setTop] = useState[]>([]); const navigation = useNavigation(); useEffect(() => { // Initialize position of badges to 0 const defineBadgePositions = () => { let localTop: Animated.Value[] = []; badges.forEach(() => { localTop.push(new Animated.Value(0)); }); setTop(localTop); }; defineBadgePositions(); }, []); // Displays badges dropdown by updating top [state] for every badge const animate = () => { for (let i = 0; i < badges?.length; i++) { if (top) { Animated.timing(top[i], { toValue: i * 40 + 50, duration: 150, easing: Easing.linear, }).start(); } } }; // Draws back displayed badges by setting top [state] to 0 for every badge const animateBack = () => { for (let i = 0; i < badges?.length; i++) { if (top) { Animated.timing(top[i], { toValue: 0, duration: 150, easing: Easing.linear, }).start(); } } }; return ( { const updatedBadges = !displayBadges; setDisplayBadges(updatedBadges); if (updatedBadges) { animate(); } else { animateBack(); } }}> {displayBadges ? ( ) : ( )} {localBadges && localBadges.map(({badge, img}, index) => ( { navigation.navigate('MutualBadgeHolders', { badge_id: badge.id, badge_title: badge.name, badge_img: img, }); }}> ))} ); }; const styles = StyleSheet.create({ badgeBackground: { position: 'absolute', width: '100%', height: '100%', borderRadius: 50, borderColor: 'transparent', borderWidth: 1, alignSelf: 'center', flexDirection: 'row', justifyContent: 'center', alignItems: 'center', }, badgesContainer: { flexDirection: 'column', justifyContent: 'space-between', alignItems: 'center', width: 38, left: '5%', paddingBottom: '2%', }, badgeButton: { width: 30, height: 30, borderRadius: 15, }, animatedBadgeView: {position: 'absolute'}, universityIconContainer: { width: normalize(31), height: normalize(38), }, }); export default BadgesDropdown;