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 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. /*
  2. * Copyright (c) 2019 - 2020 Arnaud Vergnet.
  3. *
  4. * This file is part of Campus INSAT.
  5. *
  6. * Campus INSAT is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * Campus INSAT is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with Campus INSAT. If not, see <https://www.gnu.org/licenses/>.
  18. */
  19. // @flow
  20. import * as React from 'react';
  21. import {createStackNavigator, TransitionPresets} from '@react-navigation/stack';
  22. import i18n from 'i18n-js';
  23. import {Platform} from 'react-native';
  24. import SettingsScreen from '../screens/Other/Settings/SettingsScreen';
  25. import AboutScreen from '../screens/About/AboutScreen';
  26. import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
  27. import DebugScreen from '../screens/About/DebugScreen';
  28. import TabNavigator from './TabNavigator';
  29. import GameMainScreen from '../screens/Game/screens/GameMainScreen';
  30. import VoteScreen from '../screens/Amicale/VoteScreen';
  31. import LoginScreen from '../screens/Amicale/LoginScreen';
  32. import SelfMenuScreen from '../screens/Services/SelfMenuScreen';
  33. import ProximoMainScreen from '../screens/Services/Proximo/ProximoMainScreen';
  34. import ProximoListScreen from '../screens/Services/Proximo/ProximoListScreen';
  35. import ProximoAboutScreen from '../screens/Services/Proximo/ProximoAboutScreen';
  36. import ProfileScreen from '../screens/Amicale/ProfileScreen';
  37. import ClubListScreen from '../screens/Amicale/Clubs/ClubListScreen';
  38. import ClubAboutScreen from '../screens/Amicale/Clubs/ClubAboutScreen';
  39. import ClubDisplayScreen from '../screens/Amicale/Clubs/ClubDisplayScreen';
  40. import {
  41. createScreenCollapsibleStack,
  42. getWebsiteStack,
  43. } from '../utils/CollapsibleUtils';
  44. import BugReportScreen from '../screens/Other/FeedbackScreen';
  45. import WebsiteScreen from '../screens/Services/WebsiteScreen';
  46. import EquipmentScreen from '../screens/Amicale/Equipment/EquipmentListScreen';
  47. import EquipmentLendScreen from '../screens/Amicale/Equipment/EquipmentRentScreen';
  48. import EquipmentConfirmScreen from '../screens/Amicale/Equipment/EquipmentConfirmScreen';
  49. import DashboardEditScreen from '../screens/Other/Settings/DashboardEditScreen';
  50. import GameStartScreen from '../screens/Game/screens/GameStartScreen';
  51. import ImageGalleryScreen from '../screens/Media/ImageGalleryScreen';
  52. const modalTransition =
  53. Platform.OS === 'ios'
  54. ? TransitionPresets.ModalPresentationIOS
  55. : TransitionPresets.ModalTransition;
  56. const defaultScreenOptions = {
  57. gestureEnabled: true,
  58. cardOverlayEnabled: true,
  59. ...TransitionPresets.SlideFromRightIOS,
  60. };
  61. const MainStack = createStackNavigator();
  62. function MainStackComponent(props: {
  63. createTabNavigator: () => React.Node,
  64. }): React.Node {
  65. const {createTabNavigator} = props;
  66. return (
  67. <MainStack.Navigator
  68. initialRouteName="main"
  69. headerMode="screen"
  70. screenOptions={defaultScreenOptions}>
  71. <MainStack.Screen
  72. name="main"
  73. component={createTabNavigator}
  74. options={{
  75. headerShown: false,
  76. title: i18n.t('screens.home.title'),
  77. }}
  78. />
  79. <MainStack.Screen
  80. name="gallery"
  81. component={ImageGalleryScreen}
  82. options={{
  83. headerShown: false,
  84. ...modalTransition,
  85. }}
  86. />
  87. {createScreenCollapsibleStack(
  88. 'settings',
  89. MainStack,
  90. SettingsScreen,
  91. i18n.t('screens.settings.title'),
  92. )}
  93. {createScreenCollapsibleStack(
  94. 'dashboard-edit',
  95. MainStack,
  96. DashboardEditScreen,
  97. i18n.t('screens.settings.dashboardEdit.title'),
  98. )}
  99. {createScreenCollapsibleStack(
  100. 'about',
  101. MainStack,
  102. AboutScreen,
  103. i18n.t('screens.about.title'),
  104. )}
  105. {createScreenCollapsibleStack(
  106. 'dependencies',
  107. MainStack,
  108. AboutDependenciesScreen,
  109. i18n.t('screens.about.libs'),
  110. )}
  111. {createScreenCollapsibleStack(
  112. 'debug',
  113. MainStack,
  114. DebugScreen,
  115. i18n.t('screens.about.debug'),
  116. )}
  117. {createScreenCollapsibleStack(
  118. 'game-start',
  119. MainStack,
  120. GameStartScreen,
  121. i18n.t('screens.game.title'),
  122. true,
  123. null,
  124. 'transparent',
  125. )}
  126. <MainStack.Screen
  127. name="game-main"
  128. component={GameMainScreen}
  129. options={{
  130. title: i18n.t('screens.game.title'),
  131. }}
  132. />
  133. {createScreenCollapsibleStack(
  134. 'login',
  135. MainStack,
  136. LoginScreen,
  137. i18n.t('screens.login.title'),
  138. true,
  139. {headerTintColor: '#fff'},
  140. 'transparent',
  141. )}
  142. {getWebsiteStack('website', MainStack, WebsiteScreen, '')}
  143. {createScreenCollapsibleStack(
  144. 'self-menu',
  145. MainStack,
  146. SelfMenuScreen,
  147. i18n.t('screens.menu.title'),
  148. )}
  149. {createScreenCollapsibleStack(
  150. 'proximo',
  151. MainStack,
  152. ProximoMainScreen,
  153. i18n.t('screens.proximo.title'),
  154. )}
  155. {createScreenCollapsibleStack(
  156. 'proximo-list',
  157. MainStack,
  158. ProximoListScreen,
  159. i18n.t('screens.proximo.articleList'),
  160. )}
  161. {createScreenCollapsibleStack(
  162. 'proximo-about',
  163. MainStack,
  164. ProximoAboutScreen,
  165. i18n.t('screens.proximo.title'),
  166. true,
  167. {...modalTransition},
  168. )}
  169. {createScreenCollapsibleStack(
  170. 'profile',
  171. MainStack,
  172. ProfileScreen,
  173. i18n.t('screens.profile.title'),
  174. )}
  175. {createScreenCollapsibleStack(
  176. 'club-list',
  177. MainStack,
  178. ClubListScreen,
  179. i18n.t('screens.clubs.title'),
  180. )}
  181. {createScreenCollapsibleStack(
  182. 'club-information',
  183. MainStack,
  184. ClubDisplayScreen,
  185. i18n.t('screens.clubs.details'),
  186. true,
  187. {...modalTransition},
  188. )}
  189. {createScreenCollapsibleStack(
  190. 'club-about',
  191. MainStack,
  192. ClubAboutScreen,
  193. i18n.t('screens.clubs.title'),
  194. true,
  195. {...modalTransition},
  196. )}
  197. {createScreenCollapsibleStack(
  198. 'equipment-list',
  199. MainStack,
  200. EquipmentScreen,
  201. i18n.t('screens.equipment.title'),
  202. )}
  203. {createScreenCollapsibleStack(
  204. 'equipment-rent',
  205. MainStack,
  206. EquipmentLendScreen,
  207. i18n.t('screens.equipment.book'),
  208. )}
  209. {createScreenCollapsibleStack(
  210. 'equipment-confirm',
  211. MainStack,
  212. EquipmentConfirmScreen,
  213. i18n.t('screens.equipment.confirm'),
  214. )}
  215. {createScreenCollapsibleStack(
  216. 'vote',
  217. MainStack,
  218. VoteScreen,
  219. i18n.t('screens.vote.title'),
  220. )}
  221. {createScreenCollapsibleStack(
  222. 'feedback',
  223. MainStack,
  224. BugReportScreen,
  225. i18n.t('screens.feedback.title'),
  226. )}
  227. </MainStack.Navigator>
  228. );
  229. }
  230. type PropsType = {
  231. defaultHomeRoute: string | null,
  232. // eslint-disable-next-line flowtype/no-weak-types
  233. defaultHomeData: {[key: string]: string},
  234. };
  235. export default class MainNavigator extends React.Component<PropsType> {
  236. createTabNavigator: () => React.Node;
  237. constructor(props: PropsType) {
  238. super(props);
  239. this.createTabNavigator = (): React.Node => (
  240. <TabNavigator
  241. defaultHomeRoute={props.defaultHomeRoute}
  242. defaultHomeData={props.defaultHomeData}
  243. />
  244. );
  245. }
  246. render(): React.Node {
  247. return <MainStackComponent createTabNavigator={this.createTabNavigator} />;
  248. }
  249. }