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

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