index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import React, { useCallback, useState } from 'react';
  2. import { FlatList } from 'react-native';
  3. import { useFocusEffect } from '@react-navigation/native';
  4. import { usePostGetCountriesRankingMemoriam } from '@api/ranking';
  5. import { Header, Loading, PageWrapper } from '../../../../components';
  6. import { storage, StoreType } from '../../../../storage';
  7. import { Profile } from '../Components/Profile';
  8. import { FilterButton, FilterModal } from '../Components/FilterModal';
  9. import { applyModalSort, dataRanking } from '../utils';
  10. import { RankingDropdown } from '../utils/types';
  11. import type { Ranking } from '..';
  12. const InMemoriamScreen = () => {
  13. const [memoriamRanking, setMemoriamRanking] = useState<Ranking[]>([]);
  14. const [isLoading, setIsLoading] = useState(true);
  15. const [filteredData, setFilteredData] = useState<Ranking[]>([]);
  16. const [isModalActive, setIsModalActive] = useState(false);
  17. const [confirmedValueRanking, setConfirmedValueRanking] = useState<RankingDropdown | null>();
  18. const { data: inMemoriamCountries } = usePostGetCountriesRankingMemoriam();
  19. useFocusEffect(
  20. useCallback(() => {
  21. const fetchRanking = async () => {
  22. const inMemoriam: string = storage.get('inMemoriamRanking', StoreType.STRING) as string;
  23. setMemoriamRanking(
  24. JSON.parse(inMemoriam).sort((a: Ranking, b: Ranking) => b.score_nm - a.score_nm)
  25. );
  26. setIsLoading(false);
  27. };
  28. fetchRanking();
  29. }, [])
  30. );
  31. if (isLoading) return <Loading />;
  32. return (
  33. <PageWrapper>
  34. <FilterModal
  35. isModalVisible={isModalActive}
  36. setModalVisible={(value) => setIsModalActive(value)}
  37. applyFilter={(filterAge, filterRanking, filterCountry) => {
  38. setConfirmedValueRanking(filterRanking);
  39. setFilteredData(applyModalSort(memoriamRanking, filterAge, filterRanking, filterCountry));
  40. setIsModalActive(false);
  41. }}
  42. countriesData={inMemoriamCountries ? inMemoriamCountries.data : []}
  43. />
  44. <Header
  45. label="In Memoriam"
  46. rightElement={<FilterButton onPress={() => setIsModalActive(!isModalActive)} />}
  47. />
  48. <FlatList
  49. showsVerticalScrollIndicator={false}
  50. data={filteredData.length > 0 ? filteredData : memoriamRanking}
  51. keyExtractor={(item) => item.user_id.toString()}
  52. renderItem={({ item, index }) => (
  53. <Profile
  54. userId={item.user_id}
  55. key={index}
  56. index={index}
  57. first_name={item.first_name}
  58. last_name={item.last_name}
  59. avatar={item.avatar}
  60. date_of_birth={item.age}
  61. homebase_flag={item.flag1}
  62. homebase2_flag={item.flag2}
  63. score={[
  64. item.score_nm,
  65. item.score_un,
  66. item.score_unp,
  67. item.score_dare,
  68. item.score_tcc,
  69. item.score_deep,
  70. item.score_slow,
  71. item.score_yes,
  72. item.score_kye,
  73. item.score_whs
  74. ]}
  75. active_score={
  76. confirmedValueRanking ? confirmedValueRanking.value - 1 : dataRanking[0].value - 1
  77. }
  78. tbt_score={item.score_tbt}
  79. tbt_rank={item.rank_tbt}
  80. badge_tbt={item.badge_tbt}
  81. badge_1281={item.badge_1281}
  82. badge_un={item.badge_un}
  83. badge_un_50={item.badge_un_50}
  84. badge_un_100={item.badge_un_100}
  85. badge_un_150={item.badge_un_150}
  86. auth={item.auth}
  87. />
  88. )}
  89. />
  90. </PageWrapper>
  91. );
  92. };
  93. export default InMemoriamScreen;