import { useState, useEffect } from 'react'; import { Modal, Button, Container, Row, Col, Tab, Tabs, Form, InputGroup } from 'react-bootstrap'; import MenuItem from '../molecules/MenuItem'; import BasicTemplate from '../templates/BasicTemplate'; import DataStorage from '../organisms/DataStorage'; import CacheStorage from '../organisms/CacheStorage'; import axios from 'axios'; const categoryMapper = [ { itemType: 1, category: 'Món chính' }, { itemType: 2, category: 'Đồ uống' }, { itemType: 3, category: 'Tráng miệng' }, ]; function MenuPage() { const [key, setKey] = useState(0); const [selectedDish, setSelectedDish] = useState(null); const [show, setShow] = useState(false); const [cartAmount, setCartAmount] = useState(0); const [loading, setLoading] = useState(true); const [menuItems, setMenuItems] = useState({}); function handleClose() { const cart = JSON.parse(DataStorage.get('cart')) || {}; // Đảm bảo cart không null cart[selectedDish.id] = { 'name':selectedDish.item_name, 'amount': cartAmount, 'imageSrc': selectedDish.image_url, 'price': selectedDish.price }; for (let id in cart) { if (cart[id].amount === 0) { delete cart[id]; } DataStorage.set('cart', JSON.stringify(cart)); // console.log(JSON.stringify(filteredCart)); setShow(false); } } function notLoggedInClose() { setShow(false); } function handleShow(dish) { if (DataStorage.get('isLoggedIn') === null) { setShow(true); return; } else { setSelectedDish(dish); // Đặt selectedDish ngay lập tức // Sau khi cập nhật selectedDish, lấy dữ liệu từ cart theo tên món ăn mới const cart = JSON.parse(DataStorage.get('cart')) || {}; // Kiểm tra số lượng món ăn trong cart const amount = cart[dish.id] !== undefined ? cart[dish.id] : 0; setCartAmount(amount); // Cập nhật số lượng setShow(true); // Hiển thị modal } } function setIncrease() { setCartAmount(cartAmount + 1); } function setDecrease() { if (cartAmount > 0) { setCartAmount(cartAmount - 1); } } useEffect(() => { const fetchMenuItems = async () => { try { const menuItemsByType = {}; for (const item of categoryMapper) { // Gọi API để lấy món theo itemType const response = await axios.get(process.env.REACT_APP_API_URL + `/menu-items?filter.item_type=${item.itemType}`); // Lưu danh sách món theo itemType menuItemsByType[item.itemType] = response.data.data; } console.log(menuItemsByType); setMenuItems(menuItemsByType); setLoading(false); CacheStorage.set('menuItems',JSON.stringify(menuItemsByType)); } catch (error) { console.error('Error fetching menu items:', error); setLoading(false); } }; if (CacheStorage.get('menuItems')) { setMenuItems(JSON.parse(CacheStorage.get('menuItems'))); setLoading(false); } else { fetchMenuItems(); } }, []); let modalContent; if (DataStorage.get('isLoggedIn') === null) { modalContent = ( Bạn chưa đăng nhập Vui lòng đăng nhập để xem chi tiết món và đặt hàng ) } else { modalContent = ( {selectedDish?.item_name} {/* Dish name in the title */} {selectedDish?.item_name} {/* Dish image */}

{selectedDish?.description}

{/* Dish description */} Số lượng - setCartAmount(e.target.value)} /> +
); } let menuContent; if (loading) { menuContent = (

Đang tải thực đơn...

); } else { menuContent = ( setKey(k)} className="mb-3 custom-tab" > {categoryMapper.map((category, index) => ( {menuItems[category.itemType].map((item, idx) => (
handleShow(item)} className="text-center">
))}
))}
); } return <> {modalContent}

Thực đơn

{menuContent} )} /> } export default MenuPage;