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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  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/Planning/PlanningScreen';
  6. import PlanningDisplayScreen from '../screens/Planning/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 AsyncStorageManager from "../managers/AsyncStorageManager";
  15. import HeaderButton from "../components/Custom/HeaderButton";
  16. import {withTheme} from 'react-native-paper';
  17. import i18n from "i18n-js";
  18. const TAB_ICONS = {
  19. Home: 'triangle',
  20. Planning: 'calendar-range',
  21. Proxiwash: 'tshirt-crew',
  22. Proximo: 'cart',
  23. Planex: 'clock',
  24. };
  25. const defaultScreenOptions = {
  26. gestureEnabled: true,
  27. cardOverlayEnabled: true,
  28. ...TransitionPresets.SlideFromRightIOS,
  29. };
  30. function getDrawerButton(navigation: Object) {
  31. return (
  32. <HeaderButton icon={'menu'} onPress={navigation.openDrawer}/>
  33. );
  34. }
  35. const ProximoStack = createStackNavigator();
  36. function ProximoStackComponent() {
  37. return (
  38. <ProximoStack.Navigator
  39. initialRouteName="ProximoMainScreen"
  40. headerMode="float"
  41. screenOptions={defaultScreenOptions}
  42. >
  43. <ProximoStack.Screen
  44. name="ProximoMainScreen"
  45. options={({navigation}) => {
  46. const openDrawer = getDrawerButton.bind(this, navigation);
  47. return {
  48. title: 'Proximo',
  49. headerLeft: openDrawer
  50. };
  51. }}
  52. component={ProximoMainScreen}
  53. />
  54. <ProximoStack.Screen
  55. name="ProximoListScreen"
  56. options={{
  57. title: 'Articles'
  58. }}
  59. component={ProximoListScreen}
  60. />
  61. <ProximoStack.Screen
  62. name="ProximoAboutScreen"
  63. component={ProximoAboutScreen}
  64. options={{
  65. title: 'Proximo',
  66. ...TransitionPresets.ModalSlideFromBottomIOS,
  67. }}
  68. />
  69. </ProximoStack.Navigator>
  70. );
  71. }
  72. const ProxiwashStack = createStackNavigator();
  73. function ProxiwashStackComponent() {
  74. return (
  75. <ProxiwashStack.Navigator
  76. initialRouteName="ProxiwashScreen"
  77. headerMode='float'
  78. screenOptions={defaultScreenOptions}
  79. >
  80. <ProxiwashStack.Screen
  81. name="ProxiwashScreen"
  82. component={ProxiwashScreen}
  83. options={({navigation}) => {
  84. const openDrawer = getDrawerButton.bind(this, navigation);
  85. return {
  86. title: 'Proxiwash',
  87. headerLeft: openDrawer
  88. };
  89. }}
  90. />
  91. <ProxiwashStack.Screen
  92. name="ProxiwashAboutScreen"
  93. component={ProxiwashAboutScreen}
  94. options={{
  95. title: 'Proxiwash',
  96. ...TransitionPresets.ModalSlideFromBottomIOS,
  97. }}
  98. />
  99. </ProxiwashStack.Navigator>
  100. );
  101. }
  102. const PlanningStack = createStackNavigator();
  103. function PlanningStackComponent() {
  104. return (
  105. <PlanningStack.Navigator
  106. initialRouteName="PlanningScreen"
  107. headerMode='float'
  108. screenOptions={defaultScreenOptions}
  109. >
  110. <PlanningStack.Screen
  111. name="PlanningScreen"
  112. component={PlanningScreen}
  113. options={({navigation}) => {
  114. const openDrawer = getDrawerButton.bind(this, navigation);
  115. return {
  116. title: 'Planning',
  117. headerLeft: openDrawer
  118. };
  119. }}
  120. />
  121. <PlanningStack.Screen
  122. name="PlanningDisplayScreen"
  123. component={PlanningDisplayScreen}
  124. options={{
  125. title: 'Details',
  126. ...TransitionPresets.ModalSlideFromBottomIOS,
  127. }}
  128. />
  129. </PlanningStack.Navigator>
  130. );
  131. }
  132. const HomeStack = createStackNavigator();
  133. function HomeStackComponent() {
  134. return (
  135. <HomeStack.Navigator
  136. initialRouteName="HomeScreen"
  137. headerMode="float"
  138. screenOptions={defaultScreenOptions}
  139. >
  140. <HomeStack.Screen
  141. name="HomeScreen"
  142. component={HomeScreen}
  143. options={({navigation}) => {
  144. const openDrawer = getDrawerButton.bind(this, navigation);
  145. return {
  146. title: i18n.t('screens.home'),
  147. headerLeft: openDrawer
  148. };
  149. }}
  150. />
  151. <HomeStack.Screen
  152. name="PlanningDisplayScreen"
  153. component={PlanningDisplayScreen}
  154. options={{
  155. title: 'Details',
  156. ...TransitionPresets.ModalSlideFromBottomIOS,
  157. }}
  158. />
  159. </HomeStack.Navigator>
  160. );
  161. }
  162. const PlanexStack = createStackNavigator();
  163. function PlanexStackComponent() {
  164. return (
  165. <PlanexStack.Navigator
  166. initialRouteName="HomeScreen"
  167. headerMode="float"
  168. screenOptions={defaultScreenOptions}
  169. >
  170. <PlanexStack.Screen
  171. name="PlanexScreen"
  172. component={PlanexScreen}
  173. options={({navigation}) => {
  174. const openDrawer = getDrawerButton.bind(this, navigation);
  175. return {
  176. title: 'Planex',
  177. headerLeft: openDrawer
  178. };
  179. }}
  180. />
  181. </PlanexStack.Navigator>
  182. );
  183. }
  184. const Tab = createMaterialBottomTabNavigator();
  185. function TabNavigator(props) {
  186. const {colors} = props.theme;
  187. return (
  188. <Tab.Navigator
  189. initialRouteName={AsyncStorageManager.getInstance().preferences.defaultStartScreen.current}
  190. barStyle={{backgroundColor: colors.surface}}
  191. screenOptions={({route}) => ({
  192. tabBarIcon: ({focused, color, size}) => {
  193. let icon = TAB_ICONS[route.name];
  194. // tintColor is ignoring activeColor and inactiveColor for some reason
  195. icon = focused ? icon : icon + ('-outline');
  196. return <MaterialCommunityIcons name={icon} color={color} size={26}/>;
  197. },
  198. })}
  199. activeColor={colors.primary}
  200. inactiveColor={colors.tabIcon}
  201. >
  202. <Tab.Screen
  203. name="Proximo"
  204. component={ProximoStackComponent}
  205. />
  206. <Tab.Screen
  207. name="Planning"
  208. component={PlanningStackComponent}
  209. />
  210. <Tab.Screen
  211. name="Home"
  212. component={HomeStackComponent}
  213. options={{title: i18n.t('screens.home')}}
  214. />
  215. <Tab.Screen
  216. name="Proxiwash"
  217. component={ProxiwashStackComponent}
  218. />
  219. <Tab.Screen
  220. name="Planex"
  221. component={PlanexStackComponent}
  222. />
  223. </Tab.Navigator>
  224. );
  225. }
  226. export default withTheme(TabNavigator);