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.0KB

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