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

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