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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. // @flow
  2. import * as React from 'react';
  3. import SettingsScreen from '../screens/Other/SettingsScreen';
  4. import AboutScreen from '../screens/About/AboutScreen';
  5. import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
  6. import DebugScreen from '../screens/About/DebugScreen';
  7. import {createStackNavigator, TransitionPresets} from "@react-navigation/stack";
  8. import i18n from "i18n-js";
  9. import TabNavigator from "./TabNavigator";
  10. import TetrisScreen from "../screens/Tetris/TetrisScreen";
  11. import VoteScreen from "../screens/Amicale/VoteScreen";
  12. import LoginScreen from "../screens/Amicale/LoginScreen";
  13. import {Platform} from "react-native";
  14. import AvailableRoomScreen from "../screens/Services/Websites/AvailableRoomScreen";
  15. import BibScreen from "../screens/Services/Websites/BibScreen";
  16. import SelfMenuScreen from "../screens/Services/SelfMenuScreen";
  17. import ProximoMainScreen from "../screens/Services/Proximo/ProximoMainScreen";
  18. import ProximoListScreen from "../screens/Services/Proximo/ProximoListScreen";
  19. import ProximoAboutScreen from "../screens/Services/Proximo/ProximoAboutScreen";
  20. import {AmicaleWebsiteScreen} from "../screens/Services/Websites/AmicaleWebsiteScreen";
  21. import {ElusEtudiantsWebsiteScreen} from "../screens/Services/Websites/ElusEtudiantsWebsiteScreen";
  22. import {WiketudWebsiteScreen} from "../screens/Services/Websites/WiketudWebsiteScreen";
  23. import {TutorInsaWebsiteScreen} from "../screens/Services/Websites/TutorInsaWebsiteScreen";
  24. import {ENTWebsiteScreen} from "../screens/Services/Websites/ENTWebsiteScreen";
  25. import {BlueMindWebsiteScreen} from "../screens/Services/Websites/BlueMindWebsiteScreen";
  26. import ProfileScreen from "../screens/Amicale/ProfileScreen";
  27. import ClubListScreen from "../screens/Amicale/Clubs/ClubListScreen";
  28. import ClubAboutScreen from "../screens/Amicale/Clubs/ClubAboutScreen";
  29. import ClubDisplayScreen from "../screens/Amicale/Clubs/ClubDisplayScreen";
  30. import {createScreenCollapsibleStack, getWebsiteStack} from "../utils/CollapsibleUtils";
  31. import BugReportScreen from "../screens/Other/FeedbackScreen";
  32. import MapScreen from "../screens/Services/MapScreen";
  33. const modalTransition = Platform.OS === 'ios' ? TransitionPresets.ModalPresentationIOS : TransitionPresets.ModalSlideFromBottomIOS;
  34. const screenTransition = TransitionPresets.SlideFromRightIOS;
  35. const defaultScreenOptions = {
  36. gestureEnabled: true,
  37. cardOverlayEnabled: true,
  38. ...screenTransition,
  39. };
  40. const MainStack = createStackNavigator();
  41. function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
  42. return (
  43. <MainStack.Navigator
  44. initialRouteName={'main'}
  45. headerMode={'screen'}
  46. screenOptions={defaultScreenOptions}
  47. >
  48. <MainStack.Screen
  49. name="main"
  50. component={props.createTabNavigator}
  51. options={{
  52. headerShown: false,
  53. title: i18n.t('screens.home'),
  54. }}
  55. />
  56. <MainStack.Screen
  57. name="settings"
  58. component={SettingsScreen}
  59. options={{
  60. title: i18n.t('screens.settings'),
  61. }}
  62. />
  63. <MainStack.Screen
  64. name="about"
  65. component={AboutScreen}
  66. options={{
  67. title: i18n.t('screens.about'),
  68. }}
  69. />
  70. <MainStack.Screen
  71. name="dependencies"
  72. component={AboutDependenciesScreen}
  73. options={{
  74. title: i18n.t('aboutScreen.libs')
  75. }}
  76. />
  77. <MainStack.Screen
  78. name="debug"
  79. component={DebugScreen}
  80. options={{
  81. title: i18n.t('aboutScreen.debug')
  82. }}
  83. />
  84. <MainStack.Screen
  85. name="tetris"
  86. component={TetrisScreen}
  87. options={{
  88. title: i18n.t("game.title"),
  89. }}
  90. />
  91. <MainStack.Screen
  92. name="login"
  93. component={LoginScreen}
  94. options={{
  95. title: i18n.t('screens.login'),
  96. }}
  97. />
  98. {/* INSA */}
  99. {getWebsiteStack("available-rooms", MainStack, AvailableRoomScreen, i18n.t('screens.availableRooms'))}
  100. {getWebsiteStack("bib", MainStack, BibScreen, i18n.t('screens.bib'))}
  101. {createScreenCollapsibleStack("self-menu", MainStack, SelfMenuScreen, i18n.t('screens.menuSelf'))}
  102. <MainStack.Screen
  103. name="map"
  104. component={MapScreen}
  105. options={{
  106. title: i18n.t('screens.map'),
  107. }}
  108. />
  109. {/* STUDENTS */}
  110. {createScreenCollapsibleStack("proximo", MainStack, ProximoMainScreen, i18n.t('screens.proximo'))}
  111. {createScreenCollapsibleStack(
  112. "proximo-list",
  113. MainStack,
  114. ProximoListScreen,
  115. i18n.t('screens.proximoArticles'),
  116. true,
  117. {...screenTransition},
  118. )}
  119. <MainStack.Screen
  120. name="proximo-about"
  121. component={ProximoAboutScreen}
  122. options={{
  123. title: i18n.t('screens.proximo'),
  124. ...modalTransition,
  125. }}
  126. />
  127. {getWebsiteStack("amicale-website", MainStack, AmicaleWebsiteScreen, i18n.t('screens.amicaleWebsite'))}
  128. {getWebsiteStack("elus-etudiants", MainStack, ElusEtudiantsWebsiteScreen, "Élus Étudiants")}
  129. {getWebsiteStack("wiketud", MainStack, WiketudWebsiteScreen, "Wiketud")}
  130. {getWebsiteStack("tutorinsa", MainStack, TutorInsaWebsiteScreen, "Tutor'INSA")}
  131. {getWebsiteStack("ent", MainStack, ENTWebsiteScreen, i18n.t('screens.ent'))}
  132. {getWebsiteStack("bluemind", MainStack, BlueMindWebsiteScreen, i18n.t('screens.bluemind'))}
  133. {/* AMICALE */}
  134. {createScreenCollapsibleStack("profile", MainStack, ProfileScreen, i18n.t('screens.profile'))}
  135. {createScreenCollapsibleStack("club-list", MainStack, ClubListScreen, i18n.t('clubs.clubList'))}
  136. <MainStack.Screen
  137. name="club-information"
  138. component={ClubDisplayScreen}
  139. options={{
  140. title: i18n.t('screens.clubDisplayScreen'),
  141. ...modalTransition,
  142. }}
  143. />
  144. <MainStack.Screen
  145. name="club-about"
  146. component={ClubAboutScreen}
  147. options={{
  148. title: i18n.t('screens.clubsAbout'),
  149. ...modalTransition,
  150. }}
  151. />
  152. <MainStack.Screen
  153. name="vote"
  154. component={VoteScreen}
  155. options={{
  156. title: i18n.t('screens.vote'),
  157. }}
  158. />
  159. <MainStack.Screen
  160. name="feedback"
  161. component={BugReportScreen}
  162. options={{
  163. title: i18n.t('screens.feedback'),
  164. }}
  165. />
  166. </MainStack.Navigator>
  167. );
  168. }
  169. type Props = {
  170. defaultHomeRoute: string | null,
  171. defaultHomeData: { [key: string]: any }
  172. }
  173. export default class MainNavigator extends React.Component<Props> {
  174. createTabNavigator: () => React.Node;
  175. constructor(props: Props) {
  176. super(props);
  177. this.createTabNavigator = () => <TabNavigator {...props}/>
  178. }
  179. render() {
  180. return (
  181. <MainStackComponent createTabNavigator={this.createTabNavigator}/>
  182. );
  183. }
  184. }