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';
|
2021-04-12 17:24:57 +07:00
|
|
|
import Cart from '../screens/Cart';
|
|
|
|
|
import Login from '../screens/Login';
|
|
|
|
|
import ProductSearch from '../screens/ProductSearch';
|
|
|
|
|
import { HeaderHome, HeaderCategory, HeaderProductDetail, HeaderAllOtherPage } 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"
|
2021-04-12 17:24:57 +07:00
|
|
|
component={CartNavigation}
|
2021-04-07 11:31:09 +07:00
|
|
|
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"
|
2021-04-12 17:24:57 +07:00
|
|
|
component={LoginNavigation}
|
2021-04-07 11:31:09 +07:00
|
|
|
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-12 17:24:57 +07:00
|
|
|
const CartStack = createStackNavigator();
|
|
|
|
|
|
|
|
|
|
function CartNavigation() {
|
|
|
|
|
return (
|
|
|
|
|
<CartStack.Navigator>
|
|
|
|
|
<CartStack.Screen
|
|
|
|
|
name="Cart"
|
|
|
|
|
component={Cart}
|
|
|
|
|
options={{
|
|
|
|
|
headerTitle: '',
|
|
|
|
|
headerLeft: () => (
|
|
|
|
|
<HeaderAllOtherPage headerTitle={'Giỏ hàng'} />
|
|
|
|
|
),
|
|
|
|
|
headerStyle: {
|
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
|
height: 80,
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</CartStack.Navigator>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const LoginStack = createStackNavigator();
|
|
|
|
|
|
|
|
|
|
function LoginNavigation() {
|
|
|
|
|
return (
|
|
|
|
|
<LoginStack.Navigator>
|
|
|
|
|
<LoginStack.Screen
|
|
|
|
|
name="ProductDetail"
|
|
|
|
|
component={Login}
|
|
|
|
|
options={{
|
|
|
|
|
headerTitle: '',
|
|
|
|
|
headerLeft: () => (
|
|
|
|
|
<HeaderAllOtherPage headerTitle={'Đăng nhập'} />
|
|
|
|
|
),
|
|
|
|
|
headerStyle: {
|
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
|
height: 80,
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</LoginStack.Navigator>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ProductSearchStack = createStackNavigator();
|
|
|
|
|
|
|
|
|
|
function ProductSearchNavigation() {
|
|
|
|
|
return (
|
|
|
|
|
<ProductSearchStack.Navigator>
|
|
|
|
|
<ProductSearchStack.Screen
|
|
|
|
|
name="ProductSearch"
|
|
|
|
|
component={ProductSearch}
|
|
|
|
|
options={{
|
|
|
|
|
headerTitle: '',
|
|
|
|
|
headerLeft: () => (
|
|
|
|
|
<HeaderAllOtherPage headerTitle={'Tìm kiếm'} />
|
|
|
|
|
),
|
|
|
|
|
headerStyle: {
|
|
|
|
|
backgroundColor: '#fff',
|
|
|
|
|
height: 80,
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</ProductSearchStack.Navigator>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
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 }}
|
|
|
|
|
/>
|
2021-04-12 17:24:57 +07:00
|
|
|
<AllStack.Screen
|
|
|
|
|
name="Cart"
|
|
|
|
|
component={CartNavigation}
|
|
|
|
|
options={{ headerShown: false }}
|
|
|
|
|
/>
|
|
|
|
|
<AllStack.Screen
|
|
|
|
|
name="Login"
|
|
|
|
|
component={LoginNavigation}
|
|
|
|
|
options={{ headerShown: false }}
|
|
|
|
|
/>
|
|
|
|
|
<AllStack.Screen
|
|
|
|
|
name="ProductSearch"
|
|
|
|
|
component={ProductSearchNavigation}
|
|
|
|
|
options={{ headerShown: false }}
|
|
|
|
|
/>
|
2021-04-07 11:31:09 +07:00
|
|
|
</AllStack.Navigator>
|
|
|
|
|
);
|
2021-03-29 10:09:41 +07:00
|
|
|
}
|