import React, { useCallback, useEffect, useState } from 'react'; import { View, Text, TouchableOpacity, ScrollView, FlatList, Platform } from 'react-native'; import ReactModal from 'react-native-modal'; import * as Progress from 'react-native-progress'; import { useFocusEffect, useNavigation } from '@react-navigation/native'; import CountryItem from '../Components/CountryItem'; import EditModal from '../Components/EditSlowModal'; import { Header, Input, PageWrapper, WarningModal } from 'src/components'; import { useGetSlowQuery, usePostSetSlowMutation } from '@api/countries'; import { StoreType, storage } from 'src/storage'; import { SlowData } from '../utils/types'; import { Colors } from 'src/theme'; import { styles } from './styles'; import ChevronIcon from 'assets/icons/travels-screens/down-arrow.svg'; import IngoSvg from 'assets/icons/travels-screens/info.svg'; import SearchIcon from '../../../../../assets/icons/search.svg'; import InfoIcon from 'assets/icons/info-solid.svg'; import { NAVIGATION_PAGES } from 'src/types'; import { useRegion } from 'src/contexts/RegionContext'; const CountriesScreen = () => { const token = storage.get('token', StoreType.STRING) as string; const { data, refetch } = useGetSlowQuery(String(token)); const [megaSelectorVisible, setMegaSelectorVisible] = useState(false); const [selectedMega, setSelectedMega] = useState<{ name: string; id: number }>({ name: 'ALL MEGAREGIONS', id: -1 }); const [total, setTotal] = useState({ slow: 0, visited: 0 }); const [isEditModalVisible, setIsEditModalVisible] = useState(false); const [currentItem, setCurrentItem] = useState(null); const [infoModalVisible, setInfoModalVisible] = useState(false); const [search, setSearch] = useState(''); const [filteredSlow, setFilteredSlow] = useState(null); const navigation = useNavigation(); const { handleUpdateSlowList: handleUpdateSlow, slow, setSlow, setUserData } = useRegion(); const handleOpenEditModal = (item: SlowData) => { setCurrentItem(item); setIsEditModalVisible(true); }; useEffect(() => { if (slow && slow.length) { token && calcTotalScore(); let newSlowData = slow; if (search) { newSlowData = slow?.filter((item: any) => { const itemData = item.country ? item.country.toLowerCase() : ''.toLowerCase(); const textData = search.toLowerCase(); return itemData.indexOf(textData) > -1; }) ?? []; } setFilteredSlow(newSlowData); } }, [slow]); useEffect(() => { const refetchData = async () => { await refetch().then((res) => { if (res.data) { setSlow(res.data.slow); } }); }; if (data && data.result === 'OK') { setSearch(''); if (selectedMega.id === -1) { refetchData(); } else { setSlow(data?.slow?.filter((item) => item.mega.includes(selectedMega.id))); } } }, [selectedMega]); useEffect(() => { if (data && data.result === 'OK') { setSlow(data?.slow); } }, [data]); const searchFilter = (text: string) => { if (text) { const newData: SlowData[] | null = slow?.filter((item: any) => { const itemData = item.country ? item.country.toLowerCase() : ''.toLowerCase(); const textData = text.toLowerCase(); return itemData.indexOf(textData) > -1; }) ?? []; setFilteredSlow(newData); setSearch(text); } else { setFilteredSlow(slow); setSearch(text); } }; const calcTotalScore = () => { let visited = 0; let slow11 = 0; let slow31 = 0; let slow101 = 0; slow?.forEach((item: SlowData) => { visited += item.visited; slow11 += item.slow11; slow31 += item.slow31; slow101 += item.slow101; }); setTotal({ slow: slow11 + slow31 + slow101, visited }); }; const renderCountryItem = ({ item }: { item: SlowData }) => ( ); return (
navigation.navigate(NAVIGATION_PAGES.COUNTRIES_INFO as never)} // style={{ width: 30 }} // > // // // } /> setMegaSelectorVisible(true)}> {selectedMega.name} searchFilter(text)} value={search} icon={} height={34} /> Visited countries {slow?.length ? `${total.visited}/${slow.length} • ${((total.visited * 100) / slow.length).toFixed(2)}%` : '0/0 • 100%'} SLOW score: {total.slow} setInfoModalVisible(true)}> {filteredSlow && filteredSlow?.length ? ( item.country_id.toString()} showsVerticalScrollIndicator={false} style={{ paddingTop: 8 }} /> ) : null} setMegaSelectorVisible(false)} style={styles.modal} statusBarTranslucent={true} presentationStyle="overFullScreen" > { setMegaSelectorVisible(false); setSelectedMega({ name: 'ALL MEGAREGIONS', id: -1 }); }} > ALL MEGAREGIONS {data?.megaregions?.map((mega) => ( { setMegaSelectorVisible(false); setSelectedMega(mega); }} > {mega.name} ))} {currentItem && ( setIsEditModalVisible(false)} item={currentItem} updateSlow={(id, v, s11, s31, s101) => handleUpdateSlow(id, v, s11, s31, s101)} /> )} setInfoModalVisible(false)} type="success" title="SLOW score" message={`Mark countries as visited.\nTell us if you stayed longer (7, 31, 101) days, this will increase your SLOW score, each longer stay should include at least 7 days countinuous stay in a country.`} /> ); }; export default CountriesScreen;