index.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. useEffect(() => {
  56. setMasterRanking(
  57. JSON.parse(ranking).sort((a: Ranking, b: Ranking) => b.score_nm - a.score_nm)
  58. );
  59. }, [ranking]);
  60. const getFullRanking = async () => {
  61. await mutateAsync(undefined, {
  62. onSuccess: (data) => {
  63. setMasterRanking(data.data);
  64. }
  65. });
  66. }
  67. return (
  68. <FlatList
  69. data={masterRanking}
  70. keyExtractor={(item) => item.user_id.toString()}
  71. renderItem={({ item }) => (
  72. <View style={{ display: 'flex', flexDirection: 'row' }}>
  73. <Text>{item.score_nm}</Text>
  74. <Text>{item.last_name}</Text>
  75. </View>
  76. )}
  77. onEndReached={() => getFullRanking()}
  78. onEndReachedThreshold={0.1}
  79. />
  80. );
  81. };
  82. export default RankingScreen;