import React, { useCallback, useEffect, useState } from 'react'; import { View, Text, TouchableOpacity, FlatList } from 'react-native'; import * as Progress from 'react-native-progress'; import { useFocusEffect } from '@react-navigation/native'; import { Header, PageWrapper } from 'src/components'; import { CustomButton } from '../Components'; import MegaregionsModal from '../Components/MegaregionsModal'; import { StoreType, storage } from 'src/storage'; import { DareRegion } from '../utils/types'; import { Colors } from 'src/theme'; import { styles } from '../RegionsScreen/styles'; import { RegionItem } from '../Components/MyRegionsItems/RegionItem'; import { useGetMegaregionsDareQuery, useGetRegionDareQuery, usePostSetDareRegionMutation } from '@api/myDARE'; import ChevronIcon from 'assets/icons/travels-screens/down-arrow.svg'; const DareScreen = () => { const token = storage.get('token', StoreType.STRING) as string; const { data: megaregions } = useGetMegaregionsDareQuery(token, true); const [megaSelectorVisible, setMegaSelectorVisible] = useState(false); const [selectedMega, setSelectedMega] = useState<{ name: string; id: number }>({ id: 1, name: 'SOUTHERN EUROPE' }); const { data: dareData } = useGetRegionDareQuery(selectedMega.id, token, true); const [dareRegions, setDareRegions] = useState(null); const [filteredDareRegions, setFilteredDareRegions] = useState(null); const [total, setTotal] = useState(0); const [contentIndex, setContentIndex] = useState(0); const { mutate: updateDARE } = usePostSetDareRegionMutation(); useFocusEffect( useCallback(() => { if (megaregions && megaregions.result === 'OK') { setSelectedMega(megaregions.data[1]); } }, [megaregions]) ); useEffect(() => { if (dareRegions && dareRegions.length) { calcTotalCountries(); } }, [dareRegions]); useEffect(() => { if (dareData && dareData.result === 'OK') { setDareRegions(dareData.data); } }, [dareData]); useEffect(() => { if (megaregions && megaregions.result === 'OK') { setContentIndex(0); } }, [selectedMega]); useEffect(() => { switch (contentIndex) { case 1: setFilteredDareRegions(dareRegions?.filter((item) => +item.visited <= 0) || []); break; case 2: setFilteredDareRegions(dareRegions?.filter((item) => +item.visited > 0) || []); break; case 3: setFilteredDareRegions(dareRegions?.filter((item) => item.new === 1) || []); break; default: setFilteredDareRegions(dareRegions); } }, [contentIndex, dareRegions]); const calcTotalCountries = () => { const visited = dareRegions?.filter((item) => +item.visited > 0).length || 0; setTotal(visited); }; const handleUpdateDare = useCallback( (region: number, visits: 0 | 1) => { const updatedDARE = dareRegions?.map((item) => { if (item.id === region) { return { ...item, visited: String(visits) }; } return item; }); const updatedDareData = { token, region, visits }; updateDARE(updatedDareData); updatedDARE && setDareRegions(updatedDARE); }, [dareRegions] ); const renderItem = ({ item }: { item: DareRegion }) => ( ); return (
setMegaSelectorVisible(true)}> {selectedMega?.name} setContentIndex(0)} isActive={contentIndex === 0} /> setContentIndex(1)} isActive={contentIndex === 1} /> setContentIndex(2)} isActive={contentIndex === 2} /> setContentIndex(3)} isActive={contentIndex === 3} flex={0.6} /> Visited places {dareRegions?.length ? `${total}/${dareRegions.length} • ${((total * 100) / dareRegions.length).toFixed(2)}%` : '0/0 • 100%'} {filteredDareRegions && (filteredDareRegions?.length || filteredDareRegions?.length) ? ( item.id.toString()} showsVerticalScrollIndicator={false} style={{ paddingTop: 8 }} contentContainerStyle={{ paddingBottom: 16 }} /> ) : null} setMegaSelectorVisible(false)} onSelect={(object) => { setMegaSelectorVisible(false); setSelectedMega(object); }} data={megaregions?.data ?? []} /> ); }; export default DareScreen;