Application Android et IOS pour l'amicale des élèves https://play.google.com/store/apps/details?id=fr.amicaleinsat.application
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 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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 DebugScreen from '../screens/DebugScreen';
  12. import Sidebar from "../components/Sidebar";
  13. import {createStackNavigator, TransitionPresets} from "@react-navigation/stack";
  14. import PerfHomeScreen from '../screens/PerfHomeScreen';
  15. import {Platform, StyleSheet, View} from "react-native";
  16. import ThemeManager from "../utils/ThemeManager";
  17. import Touchable from "react-native-platform-touchable";
  18. import {MaterialCommunityIcons} from "@expo/vector-icons";
  19. const styles = StyleSheet.create({
  20. header: {
  21. backgroundColor: ThemeManager.getCurrentThemeVariables().brandPrimary,
  22. },
  23. headerTitle: {
  24. color: "#ffffff",
  25. },
  26. });
  27. const defaultScreenOptions = {
  28. headerTintColor: 'white',
  29. headerStyle: styles.header,
  30. gestureEnabled: true,
  31. cardOverlayEnabled: true,
  32. ...TransitionPresets.SlideFromRightIOS,
  33. };
  34. function getDrawerButton(navigation: Object) {
  35. return (
  36. <View
  37. style={{
  38. flexDirection: 'row',
  39. marginLeft: 10
  40. }}>
  41. <Touchable
  42. style={{padding: 6}}
  43. onPress={navigation.openDrawer}>
  44. <MaterialCommunityIcons
  45. name="menu"
  46. size={26}
  47. color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}/>
  48. </Touchable>
  49. </View>
  50. );
  51. }
  52. const AboutStack = createStackNavigator();
  53. function AboutStackComponent() {
  54. return (
  55. <AboutStack.Navigator
  56. initialRouteName="AboutScreen"
  57. headerMode="float"
  58. screenOptions={defaultScreenOptions}
  59. >
  60. <AboutStack.Screen
  61. name="AboutScreen"
  62. component={AboutScreen}
  63. options={({navigation}) => {
  64. const openDrawer = getDrawerButton.bind(this, navigation);
  65. return {
  66. title: 'About',
  67. headerLeft: openDrawer
  68. };
  69. }}
  70. />
  71. <AboutStack.Screen
  72. name="AboutDependenciesScreen"
  73. component={AboutDependenciesScreen}
  74. options={{
  75. title: 'Dependencies'
  76. }}
  77. />
  78. <AboutStack.Screen
  79. name="DebugScreen"
  80. component={DebugScreen}
  81. options={{
  82. title: 'Debug'
  83. }}
  84. />
  85. </AboutStack.Navigator>
  86. );
  87. }
  88. const SettingsStack = createStackNavigator();
  89. function SettingsStackComponent() {
  90. return (
  91. <SettingsStack.Navigator
  92. initialRouteName="SettingsScreen"
  93. headerMode="float"
  94. screenOptions={defaultScreenOptions}
  95. >
  96. <SettingsStack.Screen
  97. name="SettingsScreen"
  98. component={SettingsScreen}
  99. options={({navigation}) => {
  100. const openDrawer = getDrawerButton.bind(this, navigation);
  101. return {
  102. title: 'Settings',
  103. headerLeft: openDrawer
  104. };
  105. }}
  106. />
  107. </SettingsStack.Navigator>
  108. );
  109. }
  110. const SelfMenuStack = createStackNavigator();
  111. function SelfMenuStackComponent() {
  112. return (
  113. <SelfMenuStack.Navigator
  114. initialRouteName="SelfMenuScreen"
  115. headerMode="float"
  116. screenOptions={defaultScreenOptions}
  117. >
  118. <SelfMenuStack.Screen
  119. name="SelfMenuScreen"
  120. component={SelfMenuScreen}
  121. options={({navigation}) => {
  122. const openDrawer = getDrawerButton.bind(this, navigation);
  123. return {
  124. title: 'Menu RU',
  125. headerLeft: openDrawer
  126. };
  127. }}
  128. />
  129. </SelfMenuStack.Navigator>
  130. );
  131. }
  132. const AvailableRoomStack = createStackNavigator();
  133. function AvailableRoomStackComponent() {
  134. return (
  135. <AvailableRoomStack.Navigator
  136. initialRouteName="AvailableRoomScreen"
  137. headerMode="float"
  138. screenOptions={defaultScreenOptions}
  139. >
  140. <AvailableRoomStack.Screen
  141. name="AvailableRoomScreen"
  142. component={AvailableRoomScreen}
  143. options={({navigation}) => {
  144. const openDrawer = getDrawerButton.bind(this, navigation);
  145. return {
  146. title: 'Available Rooms',
  147. headerLeft: openDrawer
  148. };
  149. }}
  150. />
  151. </AvailableRoomStack.Navigator>
  152. );
  153. }
  154. const BibStack = createStackNavigator();
  155. function BibStackComponent() {
  156. return (
  157. <BibStack.Navigator
  158. initialRouteName="BibScreen"
  159. headerMode="float"
  160. screenOptions={defaultScreenOptions}
  161. >
  162. <BibStack.Screen
  163. name="BibScreen"
  164. component={BibScreen}
  165. options={({navigation}) => {
  166. const openDrawer = getDrawerButton.bind(this, navigation);
  167. return {
  168. title: 'Bib',
  169. headerLeft: openDrawer
  170. };
  171. }}
  172. />
  173. </BibStack.Navigator>
  174. );
  175. }
  176. const Drawer = createDrawerNavigator();
  177. function getDrawerContent(nav) {
  178. return <Sidebar navigation={nav}/>
  179. }
  180. export default function DrawerNavigator() {
  181. return (
  182. <Drawer.Navigator
  183. initialRouteName={'Main'}
  184. headerMode={'float'}
  185. backBehavior={'initialRoute'}
  186. drawerType={'back'}
  187. drawerContent={props => getDrawerContent(props.navigation)}
  188. screenOptions={defaultScreenOptions}
  189. >
  190. <Drawer.Screen
  191. name="Main"
  192. component={TabNavigator}
  193. >
  194. </Drawer.Screen>
  195. <Drawer.Screen
  196. name="SettingsScreen"
  197. component={SettingsStackComponent}
  198. />
  199. <Drawer.Screen
  200. name="AboutScreen"
  201. component={AboutStackComponent}
  202. />
  203. <Drawer.Screen
  204. name="SelfMenuScreen"
  205. component={SelfMenuStackComponent}
  206. />
  207. <Drawer.Screen
  208. name="AvailableRoomScreen"
  209. component={AvailableRoomStackComponent}
  210. />
  211. <Drawer.Screen
  212. name="BibScreen"
  213. component={BibStackComponent}
  214. />
  215. </Drawer.Navigator>
  216. );
  217. }