BoilerLiftUp / src / components / home / HomeWithNav.jsx
HomeWithNav.jsx
Raw
import React, { useState } from "react";
import { StyleSheet, SafeAreaView, Text, View} from "react-native";
import { useTheme } from '@react-navigation/native';
import { DefaultTheme, NavigationContainer } from '@react-navigation/native';
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import {createStackNavigator} from '@react-navigation/stack';
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
import HomePage from "./HomePage";
import FindFriends from "../friends/FindFriends";
import UserProfile from "../profile/UserProfile";
import Communities from "../community/Communities";
import CreateCommunity from "../community/CreateCommunity";
import Nutrition from "../nutrition/Nutrition";
import EditProfile from "../profile/EditProfile";
import CommunityContent from "../community/CommunityContent";
import MakePost from "../community/MakePost";
import MyFriends from '../friends/MyFriends';
import UpdatePrivacy from '../profile/UpdatePrivacy';
import FriendProfile from '../friends/FriendProfile';
import FriendRequests from "../friends/FriendRequests";

const homepg = 'Home';
const findfriendpg = 'Friends';
const userprofilepg = 'Profile';
const communitiespg = 'Communities';
const createcommunitypg = 'CreateCommunity';
const communitycontentpg = 'CommunityContent';
const makepostpg = 'MakePost';

const tabBar = createBottomTabNavigator();
const Stack = createStackNavigator();


function HomeWithNav({route, navigation}) {
    const { colors } = useTheme();
    const [username, setUsername] = useState(route.params.username)
    function commNav() {
        return (
            <NavigationContainer theme={DefaultTheme} independent={true}>
                <Stack.Navigator initialRouteName='Communities' screenOptions={{headerShown:false}} initialParams={{username: username}}>
                <Stack.Screen screenOptions={({ route, navigation })} name="Communities" component={Communities} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="CreateCommunity" component={CreateCommunity} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="CommunityContent" component={CommunityContent} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="MakePost" component={MakePost} initialParams={{username: username}}/> 
                </Stack.Navigator>
            </NavigationContainer>
          );
    }

    function userNav() {
        return (
            <NavigationContainer theme={DefaultTheme} independent={true}>
                <Stack.Navigator initialRouteName='UserProfile' screenOptions={{headerShown:false}} initialParams={{username: username}}>
                <Stack.Screen screenOptions={({ route, navigation })} name="UserProfile" component={UserProfile} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="Nutrition" component={Nutrition} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="MyFriends" component={MyFriends} initialParams={{username: username}}/>
                <Stack.Screen screenOptions={({ route, navigation })} name="UpdatePrivacy" component={UpdatePrivacy} initialParams={{username: username}}/> 
                <Stack.Screen screenOptions={({ route, navigation })} name="EditProfile" component={EditProfile} initialParams={{username: username}}/> 
                <Stack.Screen screenOptions={({ route, navigation })} name="FriendProfile" component={FriendProfile} initialParams={{username: username}}/> 
                <Stack.Screen screenOptions={({ route, navigation })} name="FriendRequests" component={FriendRequests} initialParams={{username: username}}/>

                </Stack.Navigator>
            </NavigationContainer>
          );
    }

    function friendNav() {
        return (<NavigationContainer theme={DefaultTheme} independent={true}>
                <Stack.Navigator initialRouteName='FindFriends' screenOptions={{headerShown:false}} initialParams={{username: username}}>
                    <Stack.Screen screenOptions={({ route, navigation })} name="UserProfile" component={UserProfile} initialParams={{username: username}}/>
                    <Stack.Screen screenOptions={({ route, navigation })} name="FindFriends" component={FindFriends} initialParams={{username: username}}/>
                    <Stack.Screen screenOptions={({ route, navigation })} name="MyFriends" component={MyFriends} initialParams={{username: username}}/>
                    <Stack.Screen screenOptions={({ route, navigation })} name="FriendProfile" component={FriendProfile} initialParams={{username: username}}/>
                    <Stack.Screen screenOptions={({ route, navigation })} name="FriendRequests" component={FriendRequests} initialParams={{username: username}}/>
                </Stack.Navigator>
            </NavigationContainer>)
    }

    return (
        <NavigationContainer independent={true}>
            <tabBar.Navigator
            initialRouteName={homepg}
            screenOptions={({route}) => ({
                tabBarIcon: ({focused, color, size}) => {
                    let iconName;
                    let routeName = route.name;

                    if (routeName === homepg) {
                        iconName = focused ? 'home' : 'home-outline'
                    }
                    else if (routeName === findfriendpg) {
                        iconName = focused ? 'account-group' : 'account-group-outline'
                    }
                    else if (routeName === userprofilepg) {
                        iconName = focused ? 'account-circle' : 'account-circle-outline'
                    }
                    else if (routeName === communitiespg) {
                        iconName = focused ? 'chat' : 'chat-outline'
                    }
                    return <Icon name={iconName} color="#5c5a55" size={20}/>
                },
                headerShown: false
            })}
            tabBarOptions={{
                labelStyle: {paddingBottom: 10, fontSize: 0},
                style:{padding: 10, height:50}
            }}
            >
            <Stack.Screen
                name="Friends"
                component={friendNav}
                options={{ headerShown: false }}
            />     
            <Stack.Screen
                    name="Communities"
                    component={commNav}
                    options={{ headerShown: false }}
                />
            <Stack.Screen name="Home" component={HomePage} initialParams={{username: username}}/>
            <Stack.Screen
                    name="Profile"
                    component={userNav}
                    options={{ headerShown: false }}
            />
            </tabBar.Navigator>
        </NavigationContainer>
    );
}

const styles = StyleSheet.create({
    screen:{
        marginTop: "20%",
        paddingLeft: "5%",
        paddingRight: "5%",
        paddingBottom: "30%",
        marginLeft: "10%",
        marginRight: "10%"
    },
    title: {
        fontSize: 25,
        fontWeight: "bold",
        marginTop: "10%",
        paddingBottom: "20%",
        textAlign:"left"
    },
    
});

export default HomeWithNav;