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

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