import React from "react";
import { useColorScheme } from "react-native";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { NavigationContainer } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import Icon, { IconType } from "react-native-dynamic-vector-icons";
import { isReadyRef, navigationRef } from "react-navigation-helpers";
import DetailScreen from "@screens/detail/DetailScreen";
// ? Screens
import HomeScreen from "@screens/home/HomeScreen";
import NotificationScreen from "@screens/notification/NotificationScreen";
import ProfileScreen from "@screens/profile/ProfileScreen";
import SearchScreen from "@screens/search/SearchScreen";
/**
* ? Local & Shared Imports
*/
import { SCREENS } from "@shared-constants";
import { DarkTheme, LightTheme, palette } from "@theme/themes";
// ? If you want to use stack or tab or both
const Tab = createBottomTabNavigator();
const Stack = createStackNavigator();
const Navigation = () => {
const scheme = useColorScheme();
const isDarkMode = scheme === "dark";
React.useEffect((): any => {
return () => (isReadyRef.current = false);
}, []);
const renderTabIcon = (
route: any,
focused: boolean,
color: string,
size: number,
) => {
let iconName = "home";
switch (route.name) {
case SCREENS.HOME:
iconName = focused ? "home" : "home-outline";
break;
case SCREENS.SEARCH:
iconName = focused ? "search" : "search-outline";
break;
case SCREENS.NOTIFICATION:
iconName = focused ? "notifications" : "notifications-outline";
break;
case SCREENS.PROFILE:
iconName = focused ? "person" : "person-outline";
break;
default:
iconName = focused ? "home" : "home-outline";
break;
}
return (
);
};
const renderTabNavigation = () => {
return (
({
headerShown: false,
tabBarIcon: ({ focused, color, size }) =>
renderTabIcon(route, focused, color, size),
tabBarActiveTintColor: palette.primary,
tabBarInactiveTintColor: "gray",
tabBarStyle: {
backgroundColor: isDarkMode ? palette.black : palette.white,
},
})}
>
);
};
return (
{
isReadyRef.current = true;
}}
theme={isDarkMode ? DarkTheme : LightTheme}
>
{(props) => }
);
};
export default Navigation;