index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import React from 'react';
  2. import { View, Text, FlatList, TouchableOpacity, StyleSheet, Dimensions } from 'react-native';
  3. import { useNavigation } from '@react-navigation/native';
  4. import { Colors } from '../../../theme';
  5. import { PageWrapper } from '../../../components';
  6. import { NAVIGATION_PAGES } from 'src/types';
  7. import UserGroupIcon from '../../../../assets/icons/user-group.svg';
  8. import CrownIcon from '../../../../assets/icons/crown.svg';
  9. import IDCardIcon from '../../../../assets/icons/id-card.svg';
  10. import StreetPeopleIcon from '../../../../assets/icons/street-view.svg';
  11. import ChartPieIcon from '../../../../assets/icons/chart-pie.svg';
  12. import MemoriamIcon from '../../../../assets/icons/monument.svg';
  13. import ScrollIcon from '../../../../assets/icons/scroll.svg';
  14. import TrophyIcon from '../../../../assets/icons/trophy.svg';
  15. const TravellersScreen = () => {
  16. const navigation = useNavigation();
  17. const buttons = [
  18. { label: 'Master Ranking', icon: UserGroupIcon, page: NAVIGATION_PAGES.MASTER_RANKING },
  19. { label: 'UN Masters', icon: CrownIcon, page: NAVIGATION_PAGES.UN_MASTERS },
  20. { label: 'LPI Ranking', icon: IDCardIcon, page: NAVIGATION_PAGES.LPI_RANKING },
  21. { label: 'Series Ranking', icon: StreetPeopleIcon, page: NAVIGATION_PAGES.SERIES_RANKING },
  22. { label: 'Statistics', icon: ChartPieIcon, page: NAVIGATION_PAGES.STATISTICS },
  23. { label: 'In Memoriam', icon: MemoriamIcon, page: NAVIGATION_PAGES.IN_MEMORIAM },
  24. { label: 'In History', icon: ScrollIcon, page: NAVIGATION_PAGES.IN_HISTORY },
  25. { label: 'Triumphs', icon: TrophyIcon, page: NAVIGATION_PAGES.TRIUMPHS }
  26. ];
  27. const renderItem = ({ item }: { item: { label: string; icon: any; page: string } }) => (
  28. <TouchableOpacity
  29. style={{ alignItems: 'center' }}
  30. onPress={() => navigation.navigate(item.page as never)}
  31. >
  32. <View style={styles.button}>
  33. <item.icon
  34. fill={Colors.ORANGE}
  35. width={Dimensions.get('window').width < 380 ? 105 : 110}
  36. height={32}
  37. />
  38. <Text style={styles.label}>{item.label}</Text>
  39. </View>
  40. </TouchableOpacity>
  41. );
  42. return (
  43. <PageWrapper>
  44. <View style={{ alignItems: 'center', paddingVertical: 16 }}>
  45. <Text style={styles.title}>Travellers</Text>
  46. </View>
  47. <FlatList
  48. data={buttons}
  49. renderItem={renderItem}
  50. keyExtractor={(item, index) => 'key' + index}
  51. numColumns={2}
  52. contentContainerStyle={styles.container}
  53. style={{ flex: 1 }}
  54. columnWrapperStyle={{ justifyContent: 'space-between' }}
  55. />
  56. </PageWrapper>
  57. );
  58. };
  59. const styles = StyleSheet.create({
  60. container: {
  61. justifyContent: 'space-between',
  62. paddingHorizontal: Dimensions.get('window').width < 380 ? '5%' : 24,
  63. paddingVertical: 8,
  64. gap: 32,
  65. width: '100%'
  66. },
  67. button: {
  68. alignItems: 'center',
  69. justifyContent: 'center',
  70. paddingVertical: 16,
  71. paddingHorizontal: 8,
  72. backgroundColor: Colors.FILL_LIGHT,
  73. borderRadius: 16,
  74. gap: 12
  75. },
  76. label: {
  77. color: Colors.DARK_BLUE,
  78. fontSize: 13,
  79. fontWeight: 'bold'
  80. },
  81. title: { color: Colors.DARK_BLUE, fontSize: 14, fontWeight: '600' }
  82. });
  83. export interface Ranking {
  84. user_id: number;
  85. score_dare: number;
  86. score_nm: number;
  87. score_un: number;
  88. score_unp: number;
  89. score_tcc: number;
  90. score_deep: number;
  91. score_whs: number;
  92. score_kye: number;
  93. score_tbt: number;
  94. score_yes: number;
  95. score_slow: number;
  96. rank_tbt: number;
  97. avatar: string;
  98. first_name: string;
  99. last_name: string;
  100. age: number;
  101. flag1: string;
  102. flag2: string;
  103. badge_1281: number;
  104. badge_un: number;
  105. badge_supreme: number;
  106. badge_tbt: number;
  107. badge_offline: number;
  108. patreon: number;
  109. country: string;
  110. auth: number;
  111. rank: number;
  112. country_rank: number;
  113. dod: number;
  114. ukr: number;
  115. badges: number;
  116. arrow_nm: number;
  117. arrow_un: number;
  118. arrow_unp: number;
  119. arrow_dare: number;
  120. arrow_yes: number;
  121. arrow_whs: number;
  122. arrow_tcc: number;
  123. arrow_tbt: number;
  124. arrow_slow: number;
  125. arrow_kye: number;
  126. }
  127. export default TravellersScreen;