Sss
Sss
import {
TeamOutlined,
UserOutlined,
ShoppingCartOutlined,
CaretDownOutlined
} from '@ant-design/icons';
import { Breadcrumb, Layout, Menu, theme, Badge, Popover, Col } from 'antd';
import { useNavigate, useLocation } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import * as UserService from '../../services/UserService';
import { resetUser } from '../../redux/slides/userSlide';
import Loading from '../LoadingComponent/Loading';
import SliderComponent from '../../components/SliderComponent/SliderComponent';
import CardComponent from '../../components/CardComponent/CardComponent';
import ButtonInputSearch from '../ButtonInputSearch/ButtonInputSearch';
import { searchProduct } from '../../redux/slides/productSlide';
import * as ProductService from "../../services/ProductService";
import {
WrapperContentPopup,
WrapperHeaderAccout,
WrapperTextHeader,
WrapperTextHeaderSmall,
WrapperProducts,
WrapperButtonMore
} from './style';
useEffect(() => {
setLoading(true);
setUserName(user?.name);
setUserAvatar(user?.avatar);
const fetchAllTypeProduct = async () => {
const res = await ProductService.getAllTypeProduct();
if(res?.status === 'OK') {
setTypeProducts(res?.data);
}
setLoading(false);
};
fetchAllTypeProduct();
}, [user?.name, user?.avatar]);
const content = (
<div>
<WrapperContentPopup onClick={() => handleOnClickNavigate('profile')}>Thông
tin người dùng</WrapperContentPopup>
{user?.isAdmin && (
<WrapperContentPopup onClick={() => handleOnClickNavigate('admin')}>Quản lí
hệ thống</WrapperContentPopup>
)}
<WrapperContentPopup onClick={() => handleOnClickNavigate('my-order')}>Đơn
hàng của tôi</WrapperContentPopup>
<WrapperContentPopup onClick={() => handleOnClickNavigate()}>Đăng
xuất</WrapperContentPopup>
</div>
);
const items = [
getItem('Thông tin người dùng', 'sub1', <UserOutlined />, [
getItem('Thông tin người dùng', 'profile'),
user?.isAdmin && getItem('Quản lí hệ thống', 'admin'),
getItem('Đơn hàng của tôi', 'my-order'),
getItem('Đăng xuất', 'logout'),
]),
getItem('Danh mục sản phẩm', 'sub2', <TeamOutlined />, typeProductItems),
].filter(Boolean); // Filter out falsy values (for conditional items)
if(key === 'profile' || key === 'admin' || key === 'my-order' || key ===
'logout') {
handleOnClickNavigate(key === 'logout' ? '' : key);
} else if(key.startsWith('type-')) {
const type = key.replace('type-', '');
const path = `/product/${type.normalize('NFD').replace(/[\u0300-\u036f]/g,
'').replace(/ /g, '_')}`;
console.log("Navigating to:", path); // Debug log
navigate(path, {state: type});
}
};
<WrapperProducts>
{products?.data?.map((product) => {
return (
<CardComponent
key={product._id}
countInStock={product.countInStock}
description={product.description}
image={product.image}
name={product.name}
price={product.price}
rating={product.rating}
type={product.type}
discount={product.discount}
selled={product.selled}
id={product._id}
/>
);
})}
</WrapperProducts>
return (
<Layout style={{ minHeight: '100vh' }}>
<Sider collapsible collapsed={collapsed} onCollapse={value =>
setCollapsed(value)}>
<div style={{ height: 32, margin: 16, background: 'rgba(255, 255, 255,
0.2)', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
<div style={{ color: 'white', fontSize: '18px', fontWeight: 'bold',
cursor: 'pointer' }} onClick={() => navigate('/')}>
PetShop
</div>
</div>
<Menu
theme="dark"
defaultSelectedKeys={['1']}
mode="inline"
items={items}
onClick={handleMenuClick}
/>
</Sider>
<Layout>
<Header style={{ padding: 0, background: '#3d6912', display: 'flex',
alignItems: 'center', justifyContent: 'space-between' }}>
<div style={{ display: 'flex', alignItems: 'center', color: 'white',
marginLeft: 16 }}>
<div style={{ color: 'white', fontSize: '20px', fontWeight: 'bold',
cursor: 'pointer' }} onClick={() => navigate('/')}>
PetShop
</div>
</div>
<div style={{ display: 'flex', alignItems: 'center', marginRight: 16 }}>
<Loading isloading={loading}>
<WrapperHeaderAccout>
{userAvatar ? (
<img src={userAvatar} alt="avatar" style={{width: '30px', height:
'30px', borderRadius: '50%', objectFit: 'cover'}}/>
) : (
<UserOutlined style={{fontSize:'30px', color: 'white'}}/>
)}
{user?.access_token ? (
<>
<Popover content={content} trigger='click' open={isOpenPopup}>
<div style={{cursor: 'pointer', color: 'white'}} onClick={()
=> setIsOpenPopup((prev) => !prev)}>
{userName?.length ? userName : user?.email}
</div>
</Popover>
</>
) : (
<div onClick={handleNavigateLogin} style={{cursor: 'pointer',
color: 'white'}}>
<WrapperTextHeaderSmall>Đăng nhập/Đăng
ký</WrapperTextHeaderSmall>
<div>
<WrapperTextHeaderSmall>Tài khoản</WrapperTextHeaderSmall>
<CaretDownOutlined />
</div>
</div>
)}
</WrapperHeaderAccout>
</Loading>
{user?.access_token && (
<div onClick={() => navigate('/order')} style={{cursor: 'pointer',
marginLeft: 24}}>
<Badge count={order?.orderItems?.length} size="small">
<ShoppingCartOutlined style={{fontSize:'30px', color: '#fff'}}/>
</Badge>
</div>
)}
</div>
</Header>
<Content style={{ margin: '0 16px' }}>
<Breadcrumb style={{ margin: '16px 0' }}>
<Breadcrumb.Item>Trang chủ</Breadcrumb.Item>
<Breadcrumb.Item>Sản phẩm</Breadcrumb.Item>
</Breadcrumb>