import React, { useCallback, useEffect, useState } from 'react'; import { useFocusEffect } from '@react-navigation/native'; import { FlatList } from 'react-native'; import { useGetFullRanking, usePostGetCountriesRanking } from '@api/ranking'; import { Header, Loading, PageWrapper } from '../../../../components'; import { storage, StoreType } from '../../../../storage'; import { Profile } from '../Components/Profile'; import { FilterModal, FilterButton } from '../Components/FilterModal'; import { applyModalSort, dataRanking } from '../utils'; import type { RankingDropdown } from '../utils/types'; import type { Ranking } from '..'; import { useConnection } from 'src/contexts/ConnectionContext'; import { updateMasterRanking } from 'src/database'; const MasterRankingScreen = () => { const { data: fullData } = useGetFullRanking(); const { data: masterCountries } = usePostGetCountriesRanking(); const netInfo = useConnection(); const [masterRanking, setMasterRanking] = useState([]); const [fullRanking, setFullRanking] = useState([]); const [isLoading, setIsLoading] = useState(true); const [filteredData, setFilteredData] = useState([]); const [isModalVisible, setModalVisible] = useState(false); const [confirmedValueRanking, setConfirmedValueRanking] = useState(); useFocusEffect( useCallback(() => { const fetchRanking = async () => { const ranking = storage.get('masterRanking', StoreType.STRING) as string; let indexCounter = 0; if (!ranking) { updateMasterRanking(); setMasterRanking( fullData ? fullData?.data ?.sort( (a: Omit, b: Omit) => b.score_nm - a.score_nm || b.score_un - a.score_un || a.age - b.age ) .map((item) => { return item.dod !== 1 ? { ...item, displayIndex: indexCounter++ } : { ...item, displayIndex: -1 }; }) : [] ); return; } setMasterRanking( JSON.parse(ranking) .sort( (a: Ranking, b: Ranking) => b.score_nm - a.score_nm || b.score_un - a.score_un || a.age - b.age ) .map((item: Ranking) => { return item.dod !== 1 ? { ...item, displayIndex: indexCounter++ } : { ...item, displayIndex: -1 }; }) ); setIsLoading(false); }; fetchRanking(); }, []) ); useEffect(() => { if (fullData) { let indexCounter = 0; setFullRanking( fullData?.data ?.sort( (a: Omit, b: Omit) => b.score_nm - a.score_nm || b.score_un - a.score_un || a.age - b.age ) .map((item) => { return item.dod !== 1 ? { ...item, displayIndex: indexCounter++ } : { ...item, displayIndex: -1 }; }) ); } }, [fullData]); if (isLoading) return ; const getFullRanking = async () => { if (netInfo?.isInternetReachable && fullRanking) { setMasterRanking(fullRanking); } }; return ( setModalVisible(value)} applyFilter={(filterAge, filterRanking, filterCountry) => { setConfirmedValueRanking(filterRanking); setFilteredData( applyModalSort( netInfo?.isInternetReachable && fullRanking ? fullRanking : masterRanking, filterAge, filterRanking ?? dataRanking[0], filterCountry ) ); setModalVisible(false); }} countriesData={masterCountries ? masterCountries.data : []} />
setModalVisible(!isModalVisible)} />} /> item.user_id.toString()} renderItem={({ item, index }) => ( )} onEndReached={() => getFullRanking()} onEndReachedThreshold={0.5} /> ); }; export default MasterRankingScreen;