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 {UniversityBadge} from 'src/types'; import {UniversityIcon} from '..'; import {normalize, SCREEN_WIDTH} from '../../utils'; interface BadgesDropdownProps { localBadges: { badge: UniversityBadge; img: string; }[]; } const BadgesDropdown: React.FC = ({localBadges}) => { const [displayBadges, setDisplayBadges] = useState(false); let [top, setTop] = useState[]>([]); const navigation = useNavigation(); useEffect(() => { const defineBadgePositions = () => { let localTop: Animated.Value[] = []; localBadges.forEach(() => { localTop.push(new Animated.Value(0)); }); setTop(localTop); }; defineBadgePositions(); }, []); const animate = () => { for (let i = 0; i < localBadges.length; i++) { if (top) { Animated.timing(top[i], { toValue: i * 40 + 50, duration: 500, easing: Easing.linear, }).start(); } } }; const animateBack = () => { for (let i = 0; i < localBadges.length; i++) { if (top) { Animated.timing(top[i], { toValue: 0, duration: 500, easing: Easing.linear, }).start(); } } }; return ( { setDisplayBadges(!displayBadges); if (displayBadges) { animate(); } else { animateBack(); } }}> {localBadges && localBadges.map(({badge, img}, index) => ( { navigation.navigate('MutualBadgeHolders', { badge_id: badge.id, badge_title: badge.name, }); }}> ))} ); }; 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;