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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // @flow
  2. import * as React from 'react';
  3. import SettingsScreen from '../screens/Other/Settings/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 GameMainScreen from "../screens/Game/screens/GameMainScreen";
  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. import DashboardEditScreen from "../screens/Other/Settings/DashboardEditScreen";
  29. import GameStartScreen from "../screens/Game/screens/GameStartScreen";
  30. import GameEndScreen from "../screens/Game/screens/GameEndScreen";
  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. title: i18n.t('screens.home.title'),
  52. }}
  53. />
  54. <MainStack.Screen
  55. name="settings"
  56. component={SettingsScreen}
  57. options={{
  58. title: i18n.t('screens.settings.title'),
  59. }}
  60. />
  61. <MainStack.Screen
  62. name="dashboard-edit"
  63. component={DashboardEditScreen}
  64. options={{
  65. title: i18n.t('screens.settings.dashboardEdit.title'),
  66. }}
  67. />
  68. <MainStack.Screen
  69. name="about"
  70. component={AboutScreen}
  71. options={{
  72. title: i18n.t('screens.about.title'),
  73. }}
  74. />
  75. <MainStack.Screen
  76. name="dependencies"
  77. component={AboutDependenciesScreen}
  78. options={{
  79. title: i18n.t('screens.about.libs')
  80. }}
  81. />
  82. <MainStack.Screen
  83. name="debug"
  84. component={DebugScreen}
  85. options={{
  86. title: i18n.t('screens.about.debug')
  87. }}
  88. />
  89. <MainStack.Screen
  90. name="game-start"
  91. component={GameStartScreen}
  92. options={{
  93. title: i18n.t("screens.game.title"),
  94. }}
  95. />
  96. <MainStack.Screen
  97. name="game-main"
  98. component={GameMainScreen}
  99. options={{
  100. title: i18n.t("screens.game.title"),
  101. }}
  102. />
  103. <MainStack.Screen
  104. name="game-end"
  105. component={GameEndScreen}
  106. options={{
  107. title: i18n.t("screens.game.title"),
  108. }}
  109. />
  110. {createScreenCollapsibleStack("login", MainStack, LoginScreen, i18n.t('screens.login.title'),
  111. true, {headerTintColor: "#fff"}, 'transparent')}
  112. {getWebsiteStack("website", MainStack, WebsiteScreen, "")}
  113. {createScreenCollapsibleStack("self-menu", MainStack, SelfMenuScreen, i18n.t('screens.menu.title'))}
  114. {createScreenCollapsibleStack("proximo", MainStack, ProximoMainScreen, i18n.t('screens.proximo.title'))}
  115. {createScreenCollapsibleStack(
  116. "proximo-list",
  117. MainStack,
  118. ProximoListScreen,
  119. i18n.t('screens.proximo.articleList'),
  120. true,
  121. {...screenTransition},
  122. )}
  123. <MainStack.Screen
  124. name="proximo-about"
  125. component={ProximoAboutScreen}
  126. options={{
  127. title: i18n.t('screens.proximo.title'),
  128. ...modalTransition,
  129. }}
  130. />
  131. {createScreenCollapsibleStack("profile", MainStack, ProfileScreen, i18n.t('screens.profile.title'))}
  132. {createScreenCollapsibleStack("club-list", MainStack, ClubListScreen, i18n.t('screens.clubs.title'))}
  133. {createScreenCollapsibleStack("equipment-list", MainStack, EquipmentScreen, i18n.t('screens.equipment.title'))}
  134. {createScreenCollapsibleStack("equipment-rent", MainStack, EquipmentLendScreen, i18n.t('screens.equipment.book'))}
  135. {createScreenCollapsibleStack("equipment-confirm", MainStack, EquipmentConfirmScreen, i18n.t('screens.equipment.confirm'))}
  136. <MainStack.Screen
  137. name="club-information"
  138. component={ClubDisplayScreen}
  139. options={{
  140. title: i18n.t('screens.clubs.details'),
  141. ...modalTransition,
  142. }}
  143. />
  144. <MainStack.Screen
  145. name="club-about"
  146. component={ClubAboutScreen}
  147. options={{
  148. title: i18n.t('screens.clubs.title'),
  149. ...modalTransition,
  150. }}
  151. />
  152. <MainStack.Screen
  153. name="vote"
  154. component={VoteScreen}
  155. options={{
  156. title: i18n.t('screens.vote.title'),
  157. }}
  158. />
  159. <MainStack.Screen
  160. name="feedback"
  161. component={BugReportScreen}
  162. options={{
  163. title: i18n.t('screens.feedback.title'),
  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. }