TabsNavigator.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import 'react-native-gesture-handler';
  2. import React, {useLayoutEffect} from 'react';
  3. import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
  4. import { createStackNavigator } from '@react-navigation/stack';
  5. import { DefaultTheme } from 'react-native-paper'
  6. import Map from '../screens/Map'
  7. import { MockProvider, useMockState } from '../contexts/MockContext';
  8. import Icon from 'react-native-vector-icons/FontAwesome';
  9. import Account from '../screens/Account';
  10. import LandmarkForm from '../screens/LandmarkForm';
  11. import { getFocusedRouteNameFromRoute } from '@react-navigation/native';
  12. const shouldTabBarDisplay = (route) => {
  13. const routeName = getFocusedRouteNameFromRoute(route);
  14. console.log(routeName)
  15. if (routeName == "LandmarkForm") {
  16. return false;
  17. }
  18. return true;
  19. }
  20. const Tabs = createBottomTabNavigator();
  21. const MapStack = createStackNavigator();
  22. const AccountStack = createStackNavigator();
  23. const theme = {
  24. ...DefaultTheme,
  25. colors: {
  26. primary: '#df3f3f',
  27. accent: 'white',
  28. },
  29. }
  30. const MapStackNavigator = ({navigation, route}) => {
  31. const {dispatch, state} = useMockState();
  32. useLayoutEffect(() => {
  33. const tabBarShouldDisplay = shouldTabBarDisplay(route);
  34. if (state.tabBarVisible != tabBarShouldDisplay) {
  35. dispatch({type: "CHANGE_TABBAR_VISIBILITY", payload: tabBarShouldDisplay})
  36. }
  37. }, [navigation, route]);
  38. return(
  39. <MapStack.Navigator screenOptions={{headerTransparent: true}} screenOptions={{headerTransparent: true, headerTitle: ""}}>
  40. <MapStack.Screen name="Map" component={Map} />
  41. <MapStack.Screen name="LandmarkForm" component={LandmarkForm} />
  42. </MapStack.Navigator>
  43. )
  44. }
  45. const AccountStackNavigator = () => {
  46. return(
  47. <MapStack.Navigator screenOptions={{headerTransparent: true}} screenOptions={{headerTransparent: true, headerTitle: ""}}>
  48. <MapStack.Screen name="AccountSummary" component={Account} />
  49. </MapStack.Navigator>
  50. )
  51. }
  52. const TabsNavigator = ({route}) => {
  53. const {state} = useMockState();
  54. return(
  55. <Tabs.Navigator
  56. initialRouteName="Map"
  57. screenOptions={{tabBarVisible: state.tabBarVisible}}
  58. tabBarOptions={{
  59. keyboardHidesTabBar: true,
  60. tabBarLabel: 'Test',
  61. activeTintColor: "white",
  62. inactiveTintColor: "lightgrey",
  63. style: {paddingBottom: 5, backgroundColor: "#df3f3f"}
  64. }}>
  65. <Tabs.Screen
  66. name="Mapt"
  67. component={MapStackNavigator}
  68. options={{
  69. tabBarIcon: ({color}) => (<Icon name="map" size={15} color={color}/>),
  70. }} />
  71. <Tabs.Screen
  72. name="Account"
  73. component={AccountStackNavigator}
  74. options={{
  75. tabBarIcon: ({color}) => (<Icon name="user" size={15} color={color}/>),
  76. }} />
  77. </Tabs.Navigator>
  78. )
  79. }
  80. export default TabsNavigator;