source: my-react-app/src/components/ReadOnlyMenuList.js@ c44c5ed

main
Last change on this file since c44c5ed was c44c5ed, checked in by Aleksandar Panovski <apano77@…>, 2 weeks ago

Fixed bugs and fully developed menu now. Readonly added.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1import React, { useState, useEffect } from 'react';
2import axios from 'axios';
3import 'bootstrap/dist/css/bootstrap.min.css';
4
5const ITEMS_PER_PAGE = 6;
6
7const ReadOnlyMenuList = ({ restaurantId }) => {
8 const [menuItems, setMenuItems] = useState([]);
9 const [currentPage, setCurrentPage] = useState(1);
10
11 useEffect(() => {
12 const fetchMenu = async () => {
13 try {
14 const response = await axios.get(`http://localhost:8081/api/restaurant-menu/${restaurantId}`);
15 setMenuItems(response.data);
16 setCurrentPage(1); // Reset to first page on restaurant change
17 } catch (err) {
18 console.error('Failed to fetch menu:', err);
19 }
20 };
21
22 if (restaurantId) {
23 fetchMenu();
24 }
25 }, [restaurantId]);
26
27 const indexOfLastItem = currentPage * ITEMS_PER_PAGE;
28 const indexOfFirstItem = indexOfLastItem - ITEMS_PER_PAGE;
29 const currentItems = menuItems.slice(indexOfFirstItem, indexOfLastItem);
30 const totalPages = Math.ceil(menuItems.length / ITEMS_PER_PAGE);
31
32 const handlePageChange = (pageNumber) => {
33 setCurrentPage(pageNumber);
34 };
35
36 return (
37 <div className="container mt-4">
38 {menuItems.length > 0 && <h3 className="text-center">Menu</h3>}
39 <div className="row">
40 {currentItems.map((item) => (
41 <div key={item.menuID} className="col-md-6 mb-4">
42 <div className="card h-100 shadow-sm">
43 <div className="card-body d-flex flex-column">
44 <h5 className="card-title">{item.itemName}</h5>
45 <p className="card-text">{item.description}</p>
46 <h6 className="card-subtitle mb-2 text-muted">${item.price.toFixed(2)}</h6>
47 </div>
48 </div>
49 </div>
50 ))}
51 </div>
52
53 {totalPages > 1 && (
54 <nav className="d-flex justify-content-center">
55 <ul className="pagination">
56 {Array.from({ length: totalPages }, (_, index) => (
57 <li
58 key={index + 1}
59 className={`page-item ${currentPage === index + 1 ? 'active' : ''}`}
60 >
61 <button
62 type="button"
63 className="page-link"
64 onClick={() => handlePageChange(index + 1)}
65 >
66 {index + 1}
67 </button>
68 </li>
69 ))}
70 </ul>
71 </nav>
72 )}
73 </div>
74 );
75};
76
77export default ReadOnlyMenuList;
Note: See TracBrowser for help on using the repository browser.