Application Android et IOS pour l'amicale des élèves
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MainNavigator.js 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. // @flow
  2. import * as React from 'react';
  3. import {createStackNavigator, TransitionPresets} from '@react-navigation/stack';
  4. import i18n from 'i18n-js';
  5. import {Platform} from 'react-native';
  6. import SettingsScreen from '../screens/Other/Settings/SettingsScreen';
  7. import AboutScreen from '../screens/About/AboutScreen';
  8. import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
  9. import DebugScreen from '../screens/About/DebugScreen';
  10. import TabNavigator from './TabNavigator';
  11. import GameMainScreen from '../screens/Game/screens/GameMainScreen';
  12. import VoteScreen from '../screens/Amicale/VoteScreen';
  13. import LoginScreen from '../screens/Amicale/LoginScreen';
  14. import SelfMenuScreen from '../screens/Services/SelfMenuScreen';
  15. import ProximoMainScreen from '../screens/Services/Proximo/ProximoMainScreen';
  16. import ProximoListScreen from '../screens/Services/Proximo/ProximoListScreen';
  17. import ProximoAboutScreen from '../screens/Services/Proximo/ProximoAboutScreen';
  18. import ProfileScreen from '../screens/Amicale/ProfileScreen';
  19. import ClubListScreen from '../screens/Amicale/Clubs/ClubListScreen';
  20. import ClubAboutScreen from '../screens/Amicale/Clubs/ClubAboutScreen';
  21. import ClubDisplayScreen from '../screens/Amicale/Clubs/ClubDisplayScreen';
  22. import {
  23. createScreenCollapsibleStack,
  24. getWebsiteStack,
  25. } from '../utils/CollapsibleUtils';
  26. import BugReportScreen from '../screens/Other/FeedbackScreen';
  27. import WebsiteScreen from '../screens/Services/WebsiteScreen';
  28. import EquipmentScreen from '../screens/Amicale/Equipment/EquipmentListScreen';
  29. import EquipmentLendScreen from '../screens/Amicale/Equipment/EquipmentRentScreen';
  30. import EquipmentConfirmScreen from '../screens/Amicale/Equipment/EquipmentConfirmScreen';
  31. import DashboardEditScreen from '../screens/Other/Settings/DashboardEditScreen';
  32. import GameStartScreen from '../screens/Game/screens/GameStartScreen';
  33. const modalTransition =
  34. Platform.OS === 'ios'
  35. ? TransitionPresets.ModalPresentationIOS
  36. : TransitionPresets.ModalSlideFromBottomIOS;
  37. const defaultScreenOptions = {
  38. gestureEnabled: true,
  39. cardOverlayEnabled: true,
  40. ...TransitionPresets.SlideFromRightIOS,
  41. };
  42. const MainStack = createStackNavigator();
  43. function MainStackComponent(props: {
  44. createTabNavigator: () => React.Node,
  45. }): React.Node {
  46. const {createTabNavigator} = props;
  47. return (
  48. <MainStack.Navigator
  49. initialRouteName="main"
  50. headerMode="screen"
  51. screenOptions={defaultScreenOptions}>
  52. <MainStack.Screen
  53. name="main"
  54. component={createTabNavigator}
  55. options={{
  56. headerShown: false,
  57. title: i18n.t('screens.home.title'),
  58. }}
  59. />
  60. {createScreenCollapsibleStack(
  61. 'settings',
  62. MainStack,
  63. SettingsScreen,
  64. i18n.t('screens.settings.title'),
  65. )}
  66. {createScreenCollapsibleStack(
  67. 'dashboard-edit',
  68. MainStack,
  69. DashboardEditScreen,
  70. i18n.t('screens.settings.dashboardEdit.title'),
  71. )}
  72. {createScreenCollapsibleStack(
  73. 'about',
  74. MainStack,
  75. AboutScreen,
  76. i18n.t('screens.about.title'),
  77. )}
  78. {createScreenCollapsibleStack(
  79. 'dependencies',
  80. MainStack,
  81. AboutDependenciesScreen,
  82. i18n.t('screens.about.libs'),
  83. )}
  84. {createScreenCollapsibleStack(
  85. 'debug',
  86. MainStack,
  87. DebugScreen,
  88. i18n.t('screens.about.debug'),
  89. )}
  90. {createScreenCollapsibleStack(
  91. 'game-start',
  92. MainStack,
  93. GameStartScreen,
  94. i18n.t('screens.game.title'),
  95. )}
  96. <MainStack.Screen
  97. name="game-main"
  98. component={GameMainScreen}
  99. options={{
  100. title: i18n.t('screens.game.title'),
  101. }}
  102. />
  103. {createScreenCollapsibleStack(
  104. 'login',
  105. MainStack,
  106. LoginScreen,
  107. i18n.t('screens.login.title'),
  108. true,
  109. {headerTintColor: '#fff'},
  110. 'transparent',
  111. )}
  112. {getWebsiteStack('website', MainStack, WebsiteScreen, '')}
  113. {createScreenCollapsibleStack(
  114. 'self-menu',
  115. MainStack,
  116. SelfMenuScreen,
  117. i18n.t('screens.menu.title'),
  118. )}
  119. {createScreenCollapsibleStack(
  120. 'proximo',
  121. MainStack,
  122. ProximoMainScreen,
  123. i18n.t('screens.proximo.title'),
  124. )}
  125. {createScreenCollapsibleStack(
  126. 'proximo-list',
  127. MainStack,
  128. ProximoListScreen,
  129. i18n.t('screens.proximo.articleList'),
  130. )}
  131. {createScreenCollapsibleStack(
  132. 'proximo-about',
  133. MainStack,
  134. ProximoAboutScreen,
  135. i18n.t('screens.proximo.title'),
  136. true,
  137. {...modalTransition},
  138. )}
  139. {createScreenCollapsibleStack(
  140. 'profile',
  141. MainStack,
  142. ProfileScreen,
  143. i18n.t('screens.profile.title'),
  144. )}
  145. {createScreenCollapsibleStack(
  146. 'club-list',
  147. MainStack,
  148. ClubListScreen,
  149. i18n.t('screens.clubs.title'),
  150. )}
  151. {createScreenCollapsibleStack(
  152. 'club-information',
  153. MainStack,
  154. ClubDisplayScreen,
  155. i18n.t('screens.clubs.details'),
  156. true,
  157. {...modalTransition},
  158. )}
  159. {createScreenCollapsibleStack(
  160. 'club-about',
  161. MainStack,
  162. ClubAboutScreen,
  163. i18n.t('screens.clubs.title'),
  164. true,
  165. {...modalTransition},
  166. )}
  167. {createScreenCollapsibleStack(
  168. 'equipment-list',
  169. MainStack,
  170. EquipmentScreen,
  171. i18n.t('screens.equipment.title'),
  172. )}
  173. {createScreenCollapsibleStack(
  174. 'equipment-rent',
  175. MainStack,
  176. EquipmentLendScreen,
  177. i18n.t('screens.equipment.book'),
  178. )}
  179. {createScreenCollapsibleStack(
  180. 'equipment-confirm',
  181. MainStack,
  182. EquipmentConfirmScreen,
  183. i18n.t('screens.equipment.confirm'),
  184. )}
  185. {createScreenCollapsibleStack(
  186. 'vote',
  187. MainStack,
  188. VoteScreen,
  189. i18n.t('screens.vote.title'),
  190. )}
  191. {createScreenCollapsibleStack(
  192. 'feedback',
  193. MainStack,
  194. BugReportScreen,
  195. i18n.t('screens.feedback.title'),
  196. )}
  197. </MainStack.Navigator>
  198. );
  199. }
  200. type PropsType = {
  201. defaultHomeRoute: string | null,
  202. // eslint-disable-next-line flowtype/no-weak-types
  203. defaultHomeData: {[key: string]: string},
  204. };
  205. export default class MainNavigator extends React.Component<PropsType> {
  206. createTabNavigator: () => React.Node;
  207. constructor(props: PropsType) {
  208. super(props);
  209. this.createTabNavigator = (): React.Node => (
  210. <TabNavigator
  211. defaultHomeRoute={props.defaultHomeRoute}
  212. defaultHomeData={props.defaultHomeData}
  213. />
  214. );
  215. }
  216. render(): React.Node {
  217. return <MainStackComponent createTabNavigator={this.createTabNavigator} />;
  218. }
  219. }