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 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  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. import ClubListScreen from "../screens/Amicale/Clubs/ClubListScreen";
  20. import ClubDisplayScreen from "../screens/Amicale/Clubs/ClubDisplayScreen";
  21. import ClubAboutScreen from "../screens/Amicale/Clubs/ClubAboutScreen";
  22. const defaultScreenOptions = {
  23. gestureEnabled: true,
  24. cardOverlayEnabled: true,
  25. ...TransitionPresets.SlideFromRightIOS,
  26. };
  27. function getDrawerButton(navigation: Object) {
  28. return (
  29. <HeaderButton icon={'menu'} onPress={navigation.openDrawer}/>
  30. );
  31. }
  32. const AboutStack = createStackNavigator();
  33. function AboutStackComponent() {
  34. return (
  35. <AboutStack.Navigator
  36. initialRouteName="AboutScreen"
  37. headerMode="float"
  38. screenOptions={defaultScreenOptions}
  39. >
  40. <AboutStack.Screen
  41. name="AboutScreen"
  42. component={AboutScreen}
  43. options={({navigation}) => {
  44. const openDrawer = getDrawerButton.bind(this, navigation);
  45. return {
  46. title: i18n.t('screens.about'),
  47. headerLeft: openDrawer
  48. };
  49. }}
  50. />
  51. <AboutStack.Screen
  52. name="AboutDependenciesScreen"
  53. component={AboutDependenciesScreen}
  54. options={{
  55. title: i18n.t('aboutScreen.libs')
  56. }}
  57. />
  58. <AboutStack.Screen
  59. name="DebugScreen"
  60. component={DebugScreen}
  61. options={{
  62. title: i18n.t('aboutScreen.debug')
  63. }}
  64. />
  65. </AboutStack.Navigator>
  66. );
  67. }
  68. const SettingsStack = createStackNavigator();
  69. function SettingsStackComponent() {
  70. return (
  71. <SettingsStack.Navigator
  72. initialRouteName="SettingsScreen"
  73. headerMode="float"
  74. screenOptions={defaultScreenOptions}
  75. >
  76. <SettingsStack.Screen
  77. name="SettingsScreen"
  78. component={SettingsScreen}
  79. options={({navigation}) => {
  80. const openDrawer = getDrawerButton.bind(this, navigation);
  81. return {
  82. title: i18n.t('screens.settings'),
  83. headerLeft: openDrawer
  84. };
  85. }}
  86. />
  87. </SettingsStack.Navigator>
  88. );
  89. }
  90. const SelfMenuStack = createStackNavigator();
  91. function SelfMenuStackComponent() {
  92. return (
  93. <SelfMenuStack.Navigator
  94. initialRouteName="SelfMenuScreen"
  95. headerMode="float"
  96. screenOptions={defaultScreenOptions}
  97. >
  98. <SelfMenuStack.Screen
  99. name="SelfMenuScreen"
  100. component={SelfMenuScreen}
  101. options={({navigation}) => {
  102. const openDrawer = getDrawerButton.bind(this, navigation);
  103. return {
  104. title: i18n.t('screens.menuSelf'),
  105. headerLeft: openDrawer
  106. };
  107. }}
  108. />
  109. </SelfMenuStack.Navigator>
  110. );
  111. }
  112. const AvailableRoomStack = createStackNavigator();
  113. function AvailableRoomStackComponent() {
  114. return (
  115. <AvailableRoomStack.Navigator
  116. initialRouteName="AvailableRoomScreen"
  117. headerMode="float"
  118. screenOptions={defaultScreenOptions}
  119. >
  120. <AvailableRoomStack.Screen
  121. name="AvailableRoomScreen"
  122. component={AvailableRoomScreen}
  123. options={({navigation}) => {
  124. const openDrawer = getDrawerButton.bind(this, navigation);
  125. return {
  126. title: i18n.t('screens.availableRooms'),
  127. headerLeft: openDrawer
  128. };
  129. }}
  130. />
  131. </AvailableRoomStack.Navigator>
  132. );
  133. }
  134. const BibStack = createStackNavigator();
  135. function BibStackComponent() {
  136. return (
  137. <BibStack.Navigator
  138. initialRouteName="BibScreen"
  139. headerMode="float"
  140. screenOptions={defaultScreenOptions}
  141. >
  142. <BibStack.Screen
  143. name="BibScreen"
  144. component={BibScreen}
  145. options={({navigation}) => {
  146. const openDrawer = getDrawerButton.bind(this, navigation);
  147. return {
  148. title: i18n.t('screens.bib'),
  149. headerLeft: openDrawer
  150. };
  151. }}
  152. />
  153. </BibStack.Navigator>
  154. );
  155. }
  156. const TetrisStack = createStackNavigator();
  157. function TetrisStackComponent() {
  158. return (
  159. <TetrisStack.Navigator
  160. initialRouteName="TetrisScreen"
  161. headerMode="float"
  162. screenOptions={defaultScreenOptions}
  163. >
  164. <TetrisStack.Screen
  165. name="TetrisScreen"
  166. component={TetrisScreen}
  167. options={({navigation}) => {
  168. const openDrawer = getDrawerButton.bind(this, navigation);
  169. return {
  170. title: i18n.t("game.title"),
  171. headerLeft: openDrawer
  172. };
  173. }}
  174. />
  175. </TetrisStack.Navigator>
  176. );
  177. }
  178. const LoginStack = createStackNavigator();
  179. function LoginStackComponent() {
  180. return (
  181. <LoginStack.Navigator
  182. initialRouteName="LoginScreen"
  183. headerMode="float"
  184. screenOptions={defaultScreenOptions}
  185. >
  186. <LoginStack.Screen
  187. name="LoginScreen"
  188. component={LoginScreen}
  189. options={({navigation}) => {
  190. const openDrawer = getDrawerButton.bind(this, navigation);
  191. return {
  192. title: i18n.t('screens.login'),
  193. headerLeft: openDrawer
  194. };
  195. }}
  196. />
  197. </LoginStack.Navigator>
  198. );
  199. }
  200. const ProfileStack = createStackNavigator();
  201. function ProfileStackComponent() {
  202. return (
  203. <ProfileStack.Navigator
  204. initialRouteName="ProfileScreen"
  205. headerMode="float"
  206. screenOptions={defaultScreenOptions}
  207. >
  208. <ProfileStack.Screen
  209. name="ProfileScreen"
  210. component={ProfileScreen}
  211. options={({navigation}) => {
  212. const openDrawer = getDrawerButton.bind(this, navigation);
  213. return {
  214. title: i18n.t('screens.profile'),
  215. headerLeft: openDrawer
  216. };
  217. }}
  218. />
  219. </ProfileStack.Navigator>
  220. );
  221. }
  222. const ClubStack = createStackNavigator();
  223. function ClubStackComponent() {
  224. return (
  225. <ClubStack.Navigator
  226. initialRouteName="ClubListScreen"
  227. headerMode="float"
  228. screenOptions={defaultScreenOptions}
  229. >
  230. <ClubStack.Screen
  231. name="ClubListScreen"
  232. component={ClubListScreen}
  233. options={({navigation}) => {
  234. const openDrawer = getDrawerButton.bind(this, navigation);
  235. return {
  236. title: i18n.t('clubs.clubList'),
  237. headerLeft: openDrawer
  238. };
  239. }}
  240. />
  241. <ClubStack.Screen
  242. name="ClubDisplayScreen"
  243. component={ClubDisplayScreen}
  244. options={({navigation}) => {
  245. return {
  246. title: "",
  247. ...TransitionPresets.ModalSlideFromBottomIOS,
  248. };
  249. }}
  250. />
  251. <ClubStack.Screen
  252. name="ClubAboutScreen"
  253. component={ClubAboutScreen}
  254. options={({navigation}) => {
  255. return {
  256. title: "ABOUT",
  257. ...TransitionPresets.ModalSlideFromBottomIOS,
  258. };
  259. }}
  260. />
  261. </ClubStack.Navigator>
  262. );
  263. }
  264. const Drawer = createDrawerNavigator();
  265. function getDrawerContent(props) {
  266. return <Sidebar {...props}/>
  267. }
  268. export default function DrawerNavigator() {
  269. return (
  270. <Drawer.Navigator
  271. initialRouteName={'Main'}
  272. headerMode={'float'}
  273. backBehavior={'initialRoute'}
  274. drawerType={'front'}
  275. drawerContent={(props) => getDrawerContent(props)}
  276. screenOptions={defaultScreenOptions}
  277. >
  278. <Drawer.Screen
  279. name="Main"
  280. component={TabNavigator}
  281. >
  282. </Drawer.Screen>
  283. <Drawer.Screen
  284. name="SettingsScreen"
  285. component={SettingsStackComponent}
  286. />
  287. <Drawer.Screen
  288. name="AboutScreen"
  289. component={AboutStackComponent}
  290. />
  291. <Drawer.Screen
  292. name="SelfMenuScreen"
  293. component={SelfMenuStackComponent}
  294. />
  295. <Drawer.Screen
  296. name="AvailableRoomScreen"
  297. component={AvailableRoomStackComponent}
  298. />
  299. <Drawer.Screen
  300. name="BibScreen"
  301. component={BibStackComponent}
  302. />
  303. <Drawer.Screen
  304. name="TetrisScreen"
  305. component={TetrisStackComponent}
  306. />
  307. <Drawer.Screen
  308. name="LoginScreen"
  309. component={LoginStackComponent}
  310. />
  311. <Drawer.Screen
  312. name="ProfileScreen"
  313. component={ProfileStackComponent}
  314. />
  315. <Drawer.Screen
  316. name="ClubListScreen"
  317. component={ClubStackComponent}
  318. />
  319. </Drawer.Navigator>
  320. );
  321. }