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.

DrawerNavigator.js 9.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. // @flow
  2. import * as React from 'react';
  3. import {createDrawerNavigator} from '@react-navigation/drawer';
  4. import TabNavigator from './MainTabNavigator';
  5. import SettingsScreen from '../screens/SettingsScreen';
  6. import AboutScreen from '../screens/About/AboutScreen';
  7. import AboutDependenciesScreen from '../screens/About/AboutDependenciesScreen';
  8. import SelfMenuScreen from '../screens/SelfMenuScreen';
  9. import AvailableRoomScreen from "../screens/Websites/AvailableRoomScreen";
  10. import BibScreen from "../screens/Websites/BibScreen";
  11. import TetrisScreen from "../screens/Tetris/TetrisScreen";
  12. import DebugScreen from '../screens/About/DebugScreen';
  13. import Sidebar from "../components/Sidebar/Sidebar";
  14. import {createStackNavigator, TransitionPresets} from "@react-navigation/stack";
  15. import HeaderButton from "../components/Custom/HeaderButton";
  16. import i18n from "i18n-js";
  17. import LoginScreen from "../screens/Amicale/LoginScreen";
  18. import ProfileScreen from "../screens/Amicale/ProfileScreen";
  19. const defaultScreenOptions = {
  20. gestureEnabled: true,
  21. cardOverlayEnabled: true,
  22. ...TransitionPresets.SlideFromRightIOS,
  23. };
  24. function getDrawerButton(navigation: Object) {
  25. return (
  26. <HeaderButton icon={'menu'} onPress={navigation.openDrawer}/>
  27. );
  28. }
  29. const AboutStack = createStackNavigator();
  30. function AboutStackComponent() {
  31. return (
  32. <AboutStack.Navigator
  33. initialRouteName="AboutScreen"
  34. headerMode="float"
  35. screenOptions={defaultScreenOptions}
  36. >
  37. <AboutStack.Screen
  38. name="AboutScreen"
  39. component={AboutScreen}
  40. options={({navigation}) => {
  41. const openDrawer = getDrawerButton.bind(this, navigation);
  42. return {
  43. title: i18n.t('screens.about'),
  44. headerLeft: openDrawer
  45. };
  46. }}
  47. />
  48. <AboutStack.Screen
  49. name="AboutDependenciesScreen"
  50. component={AboutDependenciesScreen}
  51. options={{
  52. title: i18n.t('aboutScreen.libs')
  53. }}
  54. />
  55. <AboutStack.Screen
  56. name="DebugScreen"
  57. component={DebugScreen}
  58. options={{
  59. title: i18n.t('aboutScreen.debug')
  60. }}
  61. />
  62. </AboutStack.Navigator>
  63. );
  64. }
  65. const SettingsStack = createStackNavigator();
  66. function SettingsStackComponent() {
  67. return (
  68. <SettingsStack.Navigator
  69. initialRouteName="SettingsScreen"
  70. headerMode="float"
  71. screenOptions={defaultScreenOptions}
  72. >
  73. <SettingsStack.Screen
  74. name="SettingsScreen"
  75. component={SettingsScreen}
  76. options={({navigation}) => {
  77. const openDrawer = getDrawerButton.bind(this, navigation);
  78. return {
  79. title: i18n.t('screens.settings'),
  80. headerLeft: openDrawer
  81. };
  82. }}
  83. />
  84. </SettingsStack.Navigator>
  85. );
  86. }
  87. const SelfMenuStack = createStackNavigator();
  88. function SelfMenuStackComponent() {
  89. return (
  90. <SelfMenuStack.Navigator
  91. initialRouteName="SelfMenuScreen"
  92. headerMode="float"
  93. screenOptions={defaultScreenOptions}
  94. >
  95. <SelfMenuStack.Screen
  96. name="SelfMenuScreen"
  97. component={SelfMenuScreen}
  98. options={({navigation}) => {
  99. const openDrawer = getDrawerButton.bind(this, navigation);
  100. return {
  101. title: i18n.t('screens.menuSelf'),
  102. headerLeft: openDrawer
  103. };
  104. }}
  105. />
  106. </SelfMenuStack.Navigator>
  107. );
  108. }
  109. const AvailableRoomStack = createStackNavigator();
  110. function AvailableRoomStackComponent() {
  111. return (
  112. <AvailableRoomStack.Navigator
  113. initialRouteName="AvailableRoomScreen"
  114. headerMode="float"
  115. screenOptions={defaultScreenOptions}
  116. >
  117. <AvailableRoomStack.Screen
  118. name="AvailableRoomScreen"
  119. component={AvailableRoomScreen}
  120. options={({navigation}) => {
  121. const openDrawer = getDrawerButton.bind(this, navigation);
  122. return {
  123. title: i18n.t('screens.availableRooms'),
  124. headerLeft: openDrawer
  125. };
  126. }}
  127. />
  128. </AvailableRoomStack.Navigator>
  129. );
  130. }
  131. const BibStack = createStackNavigator();
  132. function BibStackComponent() {
  133. return (
  134. <BibStack.Navigator
  135. initialRouteName="BibScreen"
  136. headerMode="float"
  137. screenOptions={defaultScreenOptions}
  138. >
  139. <BibStack.Screen
  140. name="BibScreen"
  141. component={BibScreen}
  142. options={({navigation}) => {
  143. const openDrawer = getDrawerButton.bind(this, navigation);
  144. return {
  145. title: i18n.t('screens.bib'),
  146. headerLeft: openDrawer
  147. };
  148. }}
  149. />
  150. </BibStack.Navigator>
  151. );
  152. }
  153. const TetrisStack = createStackNavigator();
  154. function TetrisStackComponent() {
  155. return (
  156. <TetrisStack.Navigator
  157. initialRouteName="TetrisScreen"
  158. headerMode="float"
  159. screenOptions={defaultScreenOptions}
  160. >
  161. <TetrisStack.Screen
  162. name="TetrisScreen"
  163. component={TetrisScreen}
  164. options={({navigation}) => {
  165. const openDrawer = getDrawerButton.bind(this, navigation);
  166. return {
  167. title: i18n.t("game.title"),
  168. headerLeft: openDrawer
  169. };
  170. }}
  171. />
  172. </TetrisStack.Navigator>
  173. );
  174. }
  175. const LoginStack = createStackNavigator();
  176. function LoginStackComponent() {
  177. return (
  178. <LoginStack.Navigator
  179. initialRouteName="LoginScreen"
  180. headerMode="float"
  181. screenOptions={defaultScreenOptions}
  182. >
  183. <LoginStack.Screen
  184. name="LoginScreen"
  185. component={LoginScreen}
  186. options={({navigation}) => {
  187. const openDrawer = getDrawerButton.bind(this, navigation);
  188. return {
  189. title: i18n.t('screens.login'),
  190. headerLeft: openDrawer
  191. };
  192. }}
  193. />
  194. </LoginStack.Navigator>
  195. );
  196. }
  197. const ProfileStack = createStackNavigator();
  198. function ProfileStackComponent() {
  199. return (
  200. <ProfileStack.Navigator
  201. initialRouteName="ProfileScreen"
  202. headerMode="float"
  203. screenOptions={defaultScreenOptions}
  204. >
  205. <ProfileStack.Screen
  206. name="ProfileScreen"
  207. component={ProfileScreen}
  208. options={({navigation}) => {
  209. const openDrawer = getDrawerButton.bind(this, navigation);
  210. return {
  211. title: i18n.t('screens.profile'),
  212. headerLeft: openDrawer
  213. };
  214. }}
  215. />
  216. </ProfileStack.Navigator>
  217. );
  218. }
  219. const Drawer = createDrawerNavigator();
  220. function getDrawerContent(props) {
  221. return <Sidebar {...props}/>
  222. }
  223. export default function DrawerNavigator() {
  224. return (
  225. <Drawer.Navigator
  226. initialRouteName={'Main'}
  227. headerMode={'float'}
  228. backBehavior={'initialRoute'}
  229. drawerType={'front'}
  230. drawerContent={(props) => getDrawerContent(props)}
  231. screenOptions={defaultScreenOptions}
  232. >
  233. <Drawer.Screen
  234. name="Main"
  235. component={TabNavigator}
  236. >
  237. </Drawer.Screen>
  238. <Drawer.Screen
  239. name="SettingsScreen"
  240. component={SettingsStackComponent}
  241. />
  242. <Drawer.Screen
  243. name="AboutScreen"
  244. component={AboutStackComponent}
  245. />
  246. <Drawer.Screen
  247. name="SelfMenuScreen"
  248. component={SelfMenuStackComponent}
  249. />
  250. <Drawer.Screen
  251. name="AvailableRoomScreen"
  252. component={AvailableRoomStackComponent}
  253. />
  254. <Drawer.Screen
  255. name="BibScreen"
  256. component={BibStackComponent}
  257. />
  258. <Drawer.Screen
  259. name="TetrisScreen"
  260. component={TetrisStackComponent}
  261. />
  262. <Drawer.Screen
  263. name="LoginScreen"
  264. component={LoginStackComponent}
  265. />
  266. <Drawer.Screen
  267. name="ProfileScreen"
  268. component={ProfileStackComponent}
  269. />
  270. </Drawer.Navigator>
  271. );
  272. }