tosanoob's picture
update a lot
0d37b12
import { useState, useEffect } from 'react';
import { Button, Container, Row, Col, Tab, Tabs, Alert } from 'react-bootstrap';
import AdminTemplate from "../../templates/AdminTemplate";
import DataStorage from '../../organisms/DataStorage';
import axios from 'axios';
import MenuItem from '../../molecules/MenuItem';
import { useNavigate } from 'react-router-dom';
const categoryMapper = [
{ itemType: 1, category: 'Món chính' },
{ itemType: 2, category: 'Đồ uống' },
{ itemType: 3, category: 'Tráng miệng' },
];
export default function AdminMenuPage() {
const navigate = useNavigate();
useEffect(() => {
if (!DataStorage.get('isLoggedInAdmin')) {
navigate('/admin-login');
}
}, [navigate]);
const [error, setError] = useState("");
const [loading, setLoading] = useState(true);
const [menuItems, setMenuItems] = useState({});
const [key, setKey] = useState(0);
function organizeMenuItemsByType(menuData) {
// Lấy ra tất cả menu_item từ array ban đầu
const menuItems = menuData.map(item => item);
// Tạo một object để nhóm menu_item theo item_type, khởi tạo các mảng rỗng cho mỗi item_type từ categoryMapper
const organizedItems = categoryMapper.reduce((acc, { itemType }) => {
acc[itemType] = [];
return acc;
}, {});
// Thêm menu_item vào organizedItems theo item_type
menuItems.forEach(menuItem => {
const type = menuItem.item_type;
// Đưa menu_item vào array của item_type tương ứng
if (organizedItems[type]) {
organizedItems[type].push(menuItem);
}
});
return organizedItems;
}
useEffect(() => {
const fetchMenuItems = async () => {
try {
let menuItemsByType = {};
// Gọi API để lấy món theo itemType
const response = await axios.get(process.env.REACT_APP_API_URL + `/menu-items?limit=100`);
// Lưu danh sách món theo itemType
console.log('Response', response.data.data);
menuItemsByType = organizeMenuItemsByType(response.data.data);
console.log(menuItemsByType);
setMenuItems(menuItemsByType);
setLoading(false);
} catch (error) {
setError(JSON.stringify(error));
setLoading(false);
}
}
fetchMenuItems()
}, [])
let menuContent;
if (loading) {
menuContent = (<p>Đang tải thực đơn...</p>);
} else {
menuContent = (<Tabs
id="controlled-tab-example"
activeKey={key}
onSelect={(k) => setKey(k)}
className="mb-3 custom-tab"
>
{categoryMapper.map((category, index) => (
<Tab eventKey={index} title={category.category}>
<Container fluid className='my-5'>
<Row md={3} className="g-4">
{menuItems[category.itemType]?.map((item, idx) => (
<Col key={item.id}>
<div onClick={() => navigate(`/admin-menu-edit?id=${item.id}`)}>
<MenuItem
dishName={item.item_name}
description={item.description}
imageSrc={item.image_url}
/>
</div>
</Col>
))}
</Row>
</Container>
</Tab>
))}
</Tabs>);
}
return (
<AdminTemplate content={
(
<Container className='text-center align-items-center justify-content-center' style={{ minHeight: '80vh' }}>
{error && <Alert variant="danger">{error}</Alert>}
<h1 className='mb-5'>Menu</h1>
<Row className='my-5 justify-content-center align-items-center'>
<Col xs={8} md={4} lg={2}>
<Button onClick={() => navigate(`/admin-menu-edit`)}>
Bổ sung món mới
</Button>
</Col>
</Row>
<Row className="align-items-center">
{menuContent}
</Row>
</Container>
)
} />
);
}