Files
App_nagakaws/navigation/BottomTabNavigator.tsx

188 lines
6.2 KiB
TypeScript
Raw Normal View History

2021-03-29 10:09:41 +07:00
import { Ionicons } from '@expo/vector-icons';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createStackNavigator } from '@react-navigation/stack';
import * as React from 'react';
2021-04-07 11:31:09 +07:00
import { BottomTabParamList, TabOneParamList, TabTwoParamList } from '../types';
import { Text, View } from '../components/Themed';
2021-03-29 10:09:41 +07:00
import Colors from '../constants/Colors';
import useColorScheme from '../hooks/useColorScheme';
2021-04-07 11:31:09 +07:00
import HomePage from '../screens/HomePage';
import ProductList from '../screens/ProductList';
import MenuCategory from '../screens/MenuCategory';
import ProductDetail from '../screens/ProductDetail';
import { HeaderHome, HeaderCategory, HeaderProductDetail } from '../components/header/HeaderAllPage'
2021-03-29 10:09:41 +07:00
2021-04-07 11:31:09 +07:00
const BottomTab = createBottomTabNavigator();
2021-03-29 10:09:41 +07:00
export default function BottomTabNavigator() {
2021-04-07 11:31:09 +07:00
const colorScheme = useColorScheme();
return (
<BottomTab.Navigator
initialRouteName="Trang chủ"
tabBarOptions={{ activeTintColor: '#D8262F' }}>
<BottomTab.Screen
name="Trang chủ"
component={AllStackNavigation}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="home-outline" color={color} />,
}}
/>
<BottomTab.Screen
name="Danh mục"
component={MenuNavigation}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="apps-outline" color={color} />,
}}
/>
<BottomTab.Screen
name="Giỏ hàng"
component={ProductListNavigator}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="cart-outline" color={color} />,
}}
/>
<BottomTab.Screen
name="Chat"
component={ProductListNavigator}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="chatbubble-ellipses-outline" color={color} />,
}}
/>
<BottomTab.Screen
name="Tài khoản"
component={ProductListNavigator}
options={{
tabBarIcon: ({ color }) => <TabBarIcon name="person-outline" color={color} />,
}}
/>
</BottomTab.Navigator>
);
2021-03-29 10:09:41 +07:00
}
// You can explore the built-in icon families and icons on the web at:
// https://icons.expo.fyi/
function TabBarIcon(props: { name: React.ComponentProps<typeof Ionicons>['name']; color: string }) {
2021-04-07 11:31:09 +07:00
return <Ionicons size={30} style={{ marginBottom: -3 }} {...props} />;
2021-03-29 10:09:41 +07:00
}
// Each tab has its own navigation stack, you can read more about this pattern here:
// https://reactnavigation.org/docs/tab-based-navigation#a-stack-navigator-for-each-tab
2021-04-07 11:31:09 +07:00
const HomepageStack = createStackNavigator<TabOneParamList>();
function HomePageNavigator({ navigation }: { navigation: any }) {
return (
<HomepageStack.Navigator>
<HomepageStack.Screen
name="HomePage"
component={HomePage}
options={{
headerTitle: '',
headerLeft: () => (
<HeaderHome />
),
headerStyle: {
backgroundColor: '#fff',
height: 100,
}
}}
/>
</HomepageStack.Navigator>
);
}
const MenuStack = createStackNavigator();
2021-03-29 10:09:41 +07:00
2021-04-07 11:31:09 +07:00
function MenuNavigation() {
return (
<MenuStack.Navigator>
<MenuStack.Screen
name="Menu"
component={MenuCategory}
options={{
headerTitle: 'Tất cả danh mục',
headerTintColor: '#fff',
headerStyle: {
backgroundColor: '#D8262F',
height: 80,
}
}}
/>
</MenuStack.Navigator>
);
2021-03-29 10:09:41 +07:00
}
2021-04-07 11:31:09 +07:00
const ProductListStack = createStackNavigator<TabTwoParamList>();
function ProductListNavigator() {
return (
<ProductListStack.Navigator>
<ProductListStack.Screen
name="ProductList"
component={ProductList}
options={{
headerTitle: '',
headerLeft: () => (
<HeaderCategory />
),
headerStyle: {
backgroundColor: '#fff',
height: 100,
}
}}
/>
</ProductListStack.Navigator>
);
}
const ProductDetailStack = createStackNavigator();
function ProductDetailNavigation() {
return (
<ProductDetailStack.Navigator>
<ProductDetailStack.Screen
name="ProductDetail"
component={ProductDetail}
options={{
headerTitle: '',
headerLeft: () => (
<HeaderProductDetail />
),
headerStyle: {
backgroundColor: '#fff',
height: 80,
}
}}
/>
</ProductDetailStack.Navigator>
);
}
2021-03-29 10:09:41 +07:00
2021-04-07 11:31:09 +07:00
const AllStack = createStackNavigator();
function AllStackNavigation() {
return (
<AllStack.Navigator initialRouteName="Home">
<AllStack.Screen
name="Home"
component={HomePageNavigator}
options={{ headerShown: false }}
/>
<AllStack.Screen
name="Menu"
component={MenuNavigation}
options={{ headerShown: false }}
/>
<AllStack.Screen
name="ProductCategory"
component={ProductListNavigator}
options={{ headerShown: false }}
/>
<AllStack.Screen
name="ProductDetail"
component={ProductDetailNavigation}
options={{ headerShown: false }}
/>
</AllStack.Navigator>
);
2021-03-29 10:09:41 +07:00
}