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 (11, 31, 101) days, this will increase your SLOW score, each longer stay should include at least 11 days countinuous stay in a country.`} /> ); }; export default CountriesScreen;