Elevate / routes / app / appNav.js
appNav.js
Raw
import React, { useEffect, useContext, useState } from "react";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { Icon } from "react-native-elements";
import { Portal, Appbar, useTheme } from "react-native-paper";

import ClassPage from "./Classes/classPage";
import Home from "./Home";
import Map from "./Map";
import CalendarPage from "./calendarPage";
import { RouteContext } from "../../routes/app/context/routes/RouteContext";

import {
  ClassContextProvider,
  ClassContext,
} from "./context/storage/classes/classContext";
import { TaskContextProvider } from "./context/storage/tasks/taskContext";

const Tab = createBottomTabNavigator();

export default function AppNav({ navigation: { navigate } }) {
  const { colors } = useTheme();
  const { route, dispatch } = useContext(RouteContext);

  useEffect(() => {
    if (route == "home") {
      setAppBarTitle("Home");
      setAppBarSubtitle("Arrived.");
    } else if (route == "classes") {
      setAppBarTitle("Classes");
      setAppBarSubtitle("Manage your classes.");
    } else if (route == "calendar") {
      setAppBarTitle("Calendar");
      setAppBarSubtitle("Get everything finished.");
    } else if (route == "map") {
      setAppBarTitle("Map");
      setAppBarSubtitle("Find your way.");
    }
  }, [route]);
  const [appbarTitle, setAppBarTitle] = useState("Home");
  const [appbarSubtitle, setAppBarSubtitle] = useState("Arrived.");

  return (
    <>
      <ClassContextProvider>
        <TaskContextProvider>
          <Appbar.Header style={{ backgroundColor: colors.primary }}>
            <Appbar.Content
              title={appbarTitle}
              subtitle={appbarSubtitle}
              titleStyle={{ fontSize: 24 }}
              subtitleStyle={{ fontSize: 12 }}
            />
            <Appbar.Action icon="cog" onPress={() => navigate("Settings")} />
          </Appbar.Header>

          <Portal.Host>
            <Tab.Navigator
              screenOptions={({ route }) => ({
                tabBarIcon: ({ focused, color, size }) => {
                  let iconName;

                  if (route.name === "Home") {
                    iconName = "home";
                  } else if (route.name === "Classes") {
                    iconName = "university";
                  } else if (route.name === "Calendar") {
                    iconName = "calendar";
                  } else if (route.name === "Map") {
                    iconName = "map";
                  }
                  return (
                    <Icon
                      type="font-awesome"
                      name={iconName}
                      size={18}
                      color={color}
                    />
                  );
                },
              })}
              tabBarOptions={{
                activeTintColor: "#0275d8",
                inactiveTintColor: "gray",
              }}
            >
              <Tab.Screen
                name="Home"
                component={Home}
                listeners={{
                  tabPress: (e) => {
                    dispatch({ type: "ROUTE_HOME" });
                  },
                }}
              />
              <Tab.Screen
                name="Classes"
                component={ClassPage}
                listeners={{
                  tabPress: (e) => {
                    dispatch({ type: "ROUTE_CLASSES" });
                  },
                }}
              />
              <Tab.Screen
                name="Calendar"
                component={CalendarPage}
                listeners={{
                  tabPress: (e) => {
                    dispatch({ type: "ROUTE_CALENDAR" });
                  },
                }}
              />
              <Tab.Screen
                name="Map"
                component={Map}
                listeners={{
                  tabPress: (e) => {
                    dispatch({ type: "ROUTE_MAP" });
                  },
                }}
              />
            </Tab.Navigator>
          </Portal.Host>
        </TaskContextProvider>
      </ClassContextProvider>
    </>
  );
}