index.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import React, { useEffect, useState } from 'react';
  2. import { View, Text, FlatList } from 'react-native';
  3. import { StoreType, storage } from 'src/storage';
  4. import { fetchFullRanking } from '@api/ranking';
  5. export interface Ranking {
  6. user_id: number,
  7. score_dare: number,
  8. score_nm: number,
  9. score_un: number,
  10. score_unp: number,
  11. score_tcc: number,
  12. score_deep: number,
  13. score_whs: number,
  14. score_kye: number,
  15. score_tbt: number,
  16. score_yes: number,
  17. score_slow: number,
  18. rank_tbt: number,
  19. avatar: string,
  20. first_name: string,
  21. last_name: string,
  22. age: number,
  23. flag1: string,
  24. flag2: string,
  25. badge_1281: number,
  26. badge_un: number,
  27. badge_supreme: number,
  28. badge_tbt: number,
  29. badge_offline: number,
  30. patreon: number,
  31. country: string,
  32. auth: number,
  33. rank: number,
  34. country_rank: number,
  35. dod: number,
  36. ukr: number,
  37. badges: number,
  38. arrow_nm: number,
  39. arrow_un: number,
  40. arrow_unp: number,
  41. arrow_dare: number,
  42. arrow_yes: number,
  43. arrow_whs: number,
  44. arrow_tcc: number,
  45. arrow_tbt: number,
  46. arrow_slow: number,
  47. arrow_kye: number,
  48. }
  49. const RankingScreen = () => {
  50. const [masterRanking, setMasterRanking] = useState<Ranking[]>([]);
  51. const { mutateAsync } = fetchFullRanking();
  52. const ranking: string = storage.get('masterRanking', StoreType.STRING) as string;
  53. const lpi: string = storage.get('lpiRanking', StoreType.STRING) as string;
  54. const inHistory: string = storage.get('inHistoryRanking', StoreType.STRING) as string;
  55. const inMemoriam: string = storage.get('inMemoriamRanking', StoreType.STRING) as string;
  56. useEffect(() => {
  57. setMasterRanking(
  58. JSON.parse(ranking).sort((a: Ranking, b: Ranking) => b.score_nm - a.score_nm)
  59. );
  60. }, [ranking]);
  61. const getFullRanking = async () => {
  62. await mutateAsync(undefined, {
  63. onSuccess: (data) => {
  64. setMasterRanking(data.data);
  65. }
  66. });
  67. }
  68. return (
  69. <FlatList
  70. data={masterRanking}
  71. keyExtractor={(item) => item.user_id.toString()}
  72. renderItem={({ item }) => (
  73. <View style={{ display: 'flex', flexDirection: 'row' }}>
  74. <Text>{item.score_nm}</Text>
  75. <Text>{item.last_name}</Text>
  76. </View>
  77. )}
  78. onEndReached={() => getFullRanking()}
  79. onEndReachedThreshold={0.1}
  80. />
  81. );
  82. };
  83. export default RankingScreen;