index.tsx 4.4 KB

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