import { useEffect, useRef } from 'react'; import { Text, TouchableOpacity, View, Image, Animated } from 'react-native'; import { styles } from './style'; interface Region { id: number; name: string; region_photos: string; visitors_count: number; } interface RegionPopupProps { region: Region; userAvatars: string[]; onMarkVisited: () => void; } const RegionPopup: React.FC = ({ region, userAvatars, onMarkVisited }) => { const fadeAnim = useRef(new Animated.Value(0)).current; useEffect(() => { Animated.timing(fadeAnim, { toValue: 1, duration: 300, useNativeDriver: true, }).start(); }, [fadeAnim]); const splitRegionName = (fullName: string) => { const parts = fullName.split(/ – | - /); return { regionTitle: parts[0], regionSubtitle: parts.length > 1 ? parts[1] : '', }; }; const { regionTitle, regionSubtitle } = splitRegionName(region.name); const regionImg = JSON.parse(region.region_photos)[0]; function formatNumber(number: number) { if (number >= 1000) { return (number / 1000).toFixed(1) + 'k'; } return number.toString(); } const formattedCount = formatNumber(region.visitors_count); return ( {regionImg && ( )} {regionTitle} {regionSubtitle} {userAvatars?.map((avatar, index) => ( ))} {formattedCount} Mark Visited ); }; export default RegionPopup;