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.

MainTabNavigator.js 8.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. import * as React from 'react';
  2. import {createStackNavigator, TransitionPresets} from '@react-navigation/stack';
  3. import {createMaterialBottomTabNavigator} from "@react-navigation/material-bottom-tabs";
  4. import HomeScreen from '../screens/HomeScreen';
  5. import PlanningScreen from '../screens/PlanningScreen';
  6. import PlanningDisplayScreen from '../screens/PlanningDisplayScreen';
  7. import ProxiwashScreen from '../screens/Proxiwash/ProxiwashScreen';
  8. import ProxiwashAboutScreen from '../screens/Proxiwash/ProxiwashAboutScreen';
  9. import ProximoMainScreen from '../screens/Proximo/ProximoMainScreen';
  10. import ProximoListScreen from "../screens/Proximo/ProximoListScreen";
  11. import ProximoAboutScreen from "../screens/Proximo/ProximoAboutScreen";
  12. import PlanexScreen from '../screens/Websites/PlanexScreen';
  13. import {MaterialCommunityIcons} from "@expo/vector-icons";
  14. import ThemeManager from "../utils/ThemeManager";
  15. import AsyncStorageManager from "../utils/AsyncStorageManager";
  16. import {Platform, StyleSheet, View} from "react-native";
  17. import Touchable from "react-native-platform-touchable";
  18. const TAB_ICONS = {
  19. Home: 'triangle',
  20. Planning: 'calendar-range',
  21. Proxiwash: 'washing-machine',
  22. Proximo: 'shopping',
  23. Planex: 'timetable',
  24. };
  25. const styles = StyleSheet.create({
  26. header: {
  27. backgroundColor: ThemeManager.getCurrentThemeVariables().brandPrimary,
  28. },
  29. headerTitle: {
  30. color: "#ffffff",
  31. },
  32. });
  33. const defaultScreenOptions = {
  34. headerTintColor: 'white',
  35. headerStyle: styles.header,
  36. gestureEnabled: true,
  37. cardOverlayEnabled: true,
  38. ...TransitionPresets.SlideFromRightIOS,
  39. };
  40. function getDrawerButton(navigation: Object) {
  41. return (
  42. <View
  43. style={{
  44. flexDirection: 'row',
  45. marginLeft: 10
  46. }}>
  47. <Touchable
  48. style={{padding: 6}}
  49. onPress={navigation.openDrawer}>
  50. <MaterialCommunityIcons
  51. name="menu"
  52. size={26}
  53. color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}/>
  54. </Touchable>
  55. </View>
  56. );
  57. }
  58. const ProximoStack = createStackNavigator();
  59. function ProximoStackComponent() {
  60. return (
  61. <ProximoStack.Navigator
  62. initialRouteName="ProximoMainScreen"
  63. headerMode="float"
  64. screenOptions={defaultScreenOptions}
  65. >
  66. <ProximoStack.Screen
  67. name="ProximoMainScreen"
  68. options={({navigation}) => {
  69. const openDrawer = getDrawerButton.bind(this, navigation);
  70. return {
  71. title: 'Proximo',
  72. headerLeft: openDrawer
  73. };
  74. }}
  75. component={ProximoMainScreen}
  76. />
  77. <ProximoStack.Screen
  78. name="ProximoListScreen"
  79. options={{
  80. title: 'Articles'
  81. }}
  82. component={ProximoListScreen}
  83. />
  84. <ProximoStack.Screen
  85. name="ProximoAboutScreen"
  86. component={ProximoAboutScreen}
  87. options={{
  88. title: 'Proximo',
  89. ...TransitionPresets.ModalSlideFromBottomIOS,
  90. }}
  91. />
  92. </ProximoStack.Navigator>
  93. );
  94. }
  95. const ProxiwashStack = createStackNavigator();
  96. function ProxiwashStackComponent() {
  97. return (
  98. <ProxiwashStack.Navigator
  99. initialRouteName="ProxiwashScreen"
  100. headerMode='float'
  101. screenOptions={defaultScreenOptions}
  102. >
  103. <ProxiwashStack.Screen
  104. name="ProxiwashScreen"
  105. component={ProxiwashScreen}
  106. options={({navigation}) => {
  107. const openDrawer = getDrawerButton.bind(this, navigation);
  108. return {
  109. title: 'Proxiwash',
  110. headerLeft: openDrawer
  111. };
  112. }}
  113. />
  114. <ProxiwashStack.Screen
  115. name="ProxiwashAboutScreen"
  116. component={ProxiwashAboutScreen}
  117. options={{
  118. title: 'Proxiwash',
  119. ...TransitionPresets.ModalSlideFromBottomIOS,
  120. }}
  121. />
  122. </ProxiwashStack.Navigator>
  123. );
  124. }
  125. const PlanningStack = createStackNavigator();
  126. function PlanningStackComponent() {
  127. return (
  128. <PlanningStack.Navigator
  129. initialRouteName="PlanningScreen"
  130. headerMode='float'
  131. screenOptions={defaultScreenOptions}
  132. >
  133. <PlanningStack.Screen
  134. name="PlanningScreen"
  135. component={PlanningScreen}
  136. options={({navigation}) => {
  137. const openDrawer = getDrawerButton.bind(this, navigation);
  138. return {
  139. title: 'Planning',
  140. headerLeft: openDrawer
  141. };
  142. }}
  143. />
  144. <PlanningStack.Screen
  145. name="PlanningDisplayScreen"
  146. component={PlanningDisplayScreen}
  147. options={{
  148. title: 'Details',
  149. ...TransitionPresets.ModalSlideFromBottomIOS,
  150. }}
  151. />
  152. </PlanningStack.Navigator>
  153. );
  154. }
  155. const HomeStack = createStackNavigator();
  156. function HomeStackComponent() {
  157. return (
  158. <HomeStack.Navigator
  159. initialRouteName="HomeScreen"
  160. headerMode="float"
  161. screenOptions={defaultScreenOptions}
  162. >
  163. <HomeStack.Screen
  164. name="HomeScreen"
  165. component={HomeScreen}
  166. options={({navigation}) => {
  167. const openDrawer = getDrawerButton.bind(this, navigation);
  168. return {
  169. title: 'Home',
  170. headerLeft: openDrawer
  171. };
  172. }}
  173. />
  174. <HomeStack.Screen
  175. name="PlanningDisplayScreen"
  176. component={PlanningDisplayScreen}
  177. options={{
  178. title: 'Details',
  179. ...TransitionPresets.ModalSlideFromBottomIOS,
  180. }}
  181. />
  182. </HomeStack.Navigator>
  183. );
  184. }
  185. const PlanexStack = createStackNavigator();
  186. function PlanexStackComponent() {
  187. return (
  188. <PlanexStack.Navigator
  189. initialRouteName="HomeScreen"
  190. headerMode="float"
  191. screenOptions={defaultScreenOptions}
  192. >
  193. <PlanexStack.Screen
  194. name="PlanexScreen"
  195. component={PlanexScreen}
  196. options={({navigation}) => {
  197. const openDrawer = getDrawerButton.bind(this, navigation);
  198. return {
  199. title: 'Planex',
  200. headerLeft: openDrawer
  201. };
  202. }}
  203. />
  204. </PlanexStack.Navigator>
  205. );
  206. }
  207. const Tab = createMaterialBottomTabNavigator();
  208. export default function TabNavigator() {
  209. return (
  210. <Tab.Navigator
  211. initialRouteName={AsyncStorageManager.getInstance().preferences.defaultStartScreen.current}
  212. barStyle={{backgroundColor: ThemeManager.getCurrentThemeVariables().brandPrimary}}
  213. screenOptions={({route}) => ({
  214. tabBarIcon: ({focused, color, size}) => {
  215. let icon = TAB_ICONS[route.name];
  216. // tintColor is ignoring activeColor and inactiveColor for some reason
  217. color = focused ? "#f0edf6" : "#4e1108";
  218. return <MaterialCommunityIcons name={icon} color={color} size={26}/>;
  219. },
  220. })}
  221. >
  222. <Tab.Screen
  223. name="Proximo"
  224. component={ProximoStackComponent}
  225. />
  226. <Tab.Screen
  227. name="Planning"
  228. component={PlanningStackComponent}
  229. />
  230. <Tab.Screen
  231. name="Home"
  232. component={HomeStackComponent}
  233. />
  234. <Tab.Screen
  235. name="Proxiwash"
  236. component={ProxiwashStackComponent}
  237. />
  238. <Tab.Screen
  239. name="Planex"
  240. component={PlanexStackComponent}
  241. />
  242. </Tab.Navigator>
  243. );
  244. }