877 lines
47 KiB
JavaScript

"use client"
import React, { Suspense, useEffect, useState } from "react";
import { useParams, useSearchParams } from "next/navigation";
import Link from "next/link";
import MasterLayout from "@/masterLayout/MasterLayout";
import client from "../../../../Auth";
import { gradientClasses } from "../../../../utils/constant.utils";
import { Icon } from "@iconify/react";
import PageLoader from "@/components/common-component/PageLoader";
import PageNoData from "@/components/common-component/PageNoData";
import Breadcrumb from "@/components/Breadcrumb";
const MenuItemsCategoryInner = () => {
const params = useParams();
// const menuName = params.name;
const searchParams = useSearchParams();
const tableName = searchParams.get('table');
const seats = searchParams.get('seats');
const time = searchParams.get('time');
const menuName = searchParams.get('menuname');
const [menuData, setMenuData] = useState(null);
const [menuItems, setMenuItems] = useState(null);
// const [sections, setSections] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [activeCategory, setActiveCategory] = useState(null);
const [cart, setCart] = useState([]);
const [showOrderModal, setShowOrderModal] = useState(false);
const [orderStatus, setOrderStatus] = useState('pending');
const HST_TAX_RATE = 0.13; // 13% HST tax rate
const [catMenu, setCatMenu] = useState(null);
const [catMenuActive, setCatMenuActive] = useState(null)
const [selectedItem, setSelectedItem] = useState(null);
const [showItemModal, setShowItemModal] = useState(false);
const [selectedExtras, setSelectedExtras] = useState([]);
const [selectedDrink, setSelectedDrink] = useState(null);
const [orderItems, setOrderItems] = useState([])
useEffect(() => {
getMenuItem();
}, []);
const getMenuItem = async () => {
try {
const res = await client?.get(`/Dine360 Menu?fields=["*"]&limit_page_length=100`);
setCatMenu(res?.data?.data || []);
setCatMenuActive(res?.data?.data[0]?.name || [])
} catch (error) {
console.error("Error fetching menu list:", error);
}
};
useEffect(() => {
if (catMenu?.length > 0) {
getMenuItems(catMenu[0]?.menuname); // auto-load first menu's categories
}
}, [catMenu]);
useEffect(() => {
if (menuData?.length > 0) {
getMenuFoodItems(menuData[0]);
setActiveCategory(menuData[0]?.name);
}
}, [menuData]);
const getMenuItems = async (menuname) => {
try {
setLoading(true);
setError(null);
const menuRes = await client.get(
`/Dine360%20Menu%20Category%20Link?fields=["*"]&limit_page_length=100&filters=[["menu","=","${menuname}"]]`
);
const menuLinks = menuRes?.data?.data || [];
const menuCategoryPromises = menuLinks.map(async (menuItem) => {
const res = await client.get(
`/Dine360%20Menu%20Category?fields=["*"]&limit_page_length=100&filters=[["name","=","${menuItem.menucategory}"]]`
);
return res?.data?.data?.[0] || null;
});
const categories = await Promise.all(menuCategoryPromises);
const validCategories = categories.filter(Boolean);
setMenuData(validCategories);
} catch (error) {
console.error("Error fetching menu categories:", error);
setError(error?.message || "Failed to fetch menu categories");
} finally {
setLoading(false);
}
};
const getMenuFoodItems = async (category) => {
if (!category?.name) return;
try {
const res = await client.get(
`/Dine360%20Menu%20Category/${category.name}?fields=["*"]&limit_page_length=100`
);
setMenuItems(res?.data?.data || []);
} catch (error) {
console.error("Error fetching menu items:", error);
}
};
// Fetch sides linked to a specific food item
const getLinkedSides = async (foodItemName) => {
try {
const res = await client.get(
`/Dine360 FoodItem Sides Link?fields=["*"]&filters=[["menuitemname","=","${foodItemName}"]]`
);
return res.data.data; // Sides linked to this menu item
} catch (error) {
console.error(`Error fetching linked sides for item: ${foodItemName}`, error);
return [];
}
};
// Fetch and group all sides by their category
const getAllSidesGroupedByCategory = async (foodItemName) => {
try {
const res = await client.get(`/Dine360 FoodItem Sides Link?fields=["*"]&filters=[["menuitemname","=","${foodItemName}"]]`);
console.log("Grouped Sides:", res.data.data);
const SliderLink = res?.data?.data || [];
const SidesList = SliderLink.map(async (sideItem) => {
const res = await client.get(
`/Dine360 Food Sides?fields=["*"]&filters=[["name","=","${sideItem.menucategory}"]]`
);
return res?.data?.data?.[0] || null;
});
const categories = await Promise.all(SidesList);
const validSides = categories.filter(Boolean);
console.log("validSides", validSides)
} catch (err) {
console.error("Error fetching grouped sides:", err);
return [];
}
};
const handleAddToOrder = () => {
const cartItem = cart.find(item => item.name === selectedItem.name);
if (!cartItem) {
alert("Please add the item to cart before adding to order.");
return;
}
setOrderItems(cart);
setShowItemModal(false);
};
// For user clicking category from catMenu
const handleCatMenuClick = async (menuname) => {
await getMenuItems(menuname);
setCatMenuActive(menuname)
};
// For user clicking individual menu category
const handleMenuClick = async (menu) => {
try {
const res = await client.get(
`/Dine360%20Menu%20Category/${menu.name}?fields=["*"]&limit_page_length=100`
);
setMenuItems(res?.data?.data || []);
setActiveCategory(menu?.name);
} catch (error) {
console.error("Error fetching menu data:", error);
setError(error?.message || "Failed to fetch menu data");
}
};
console.log("menuItems", menuItems);
const addToCart = (item) => {
const existingItem = cart.find(cartItem => cartItem.name === item.name);
if (existingItem) {
setCart(cart.map(cartItem =>
cartItem.name === item.name
? { ...cartItem, quantity: cartItem.quantity + 1 }
: cartItem
));
} else {
setCart([...cart, { ...item, quantity: 1 }]);
}
};
const removeFromCart = (itemName) => {
setCart(prev => prev.filter(item => item.name !== itemName));
setOrderItems(prev => prev.filter(item => item.name !== itemName));
};
const updateQuantity = (itemName, newQuantity) => {
if (newQuantity < 1) {
removeItem(itemName);
return;
}
// Update cart
setCart(prev =>
prev.map(item =>
item.name === itemName
? { ...item, quantity: newQuantity }
: item
)
);
// Update orderItems
setOrderItems(prev =>
prev.map(item =>
item.name === itemName
? { ...item, quantity: newQuantity }
: item
)
);
};
const calculateSubtotal = () => {
return cart.reduce((total, item) => total + (item.price * item.quantity), 0);
};
const calculateTax = () => {
return calculateSubtotal() * HST_TAX_RATE;
};
const calculateTotal = () => {
return calculateSubtotal() + calculateTax();
};
const handlePlaceOrder = () => {
setShowOrderModal(true);
};
// Toggle extras like checkbox buttons
const toggleExtra = (extra) => {
setSelectedExtras(prev =>
prev.includes(extra)
? prev.filter(item => item !== extra)
: [...prev, extra]
);
};
// Select one drink at a time
const selectDrink = (drink) => {
setSelectedDrink(drink === selectedDrink ? null : drink);
};
const confirmOrder = async () => {
// Get current time in YYYY-MM-DD HH:mm:ss format (Canada Eastern Time)
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0'); // month is 0-based
const day = String(now.getDate()).padStart(2, '0');
const hour = String(now.getHours()).padStart(2, '0');
const minute = String(now.getMinutes()).padStart(2, '0');
const second = String(now.getSeconds()).padStart(2, '0');
const orderStartTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
console.log(orderStartTime);
// Prepare formatted order data
const formattedOrder = orderItems.map((item) => ({
menuitem: item.name,
quantity: item.quantity,
rate: item.price,
amount: item.price * item.quantity,
menu: menuName,
menucategory: item.parent,
status: "Avaialble"
}));
const Body = {
customer: "kadeeja",
ordertaker: "surya",
phone: "+91-8220348218",
table: tableName,
partysize: seats,
orderstatus: "Cooking",
tableoccupiedtime: time,
orderstarttime: orderStartTime, // dynamically set here
orderendtime: null, // optional: update later
durationintable: null,
orderamount: calculateSubtotal().toFixed(2),
hstpercentage: 13,
hstamount: calculateTax().toFixed(2),
totalamount: calculateTotal().toFixed(2),
orderinstructions: null,
order_items: formattedOrder
};
console.log("Body", Body);
try {
const res = await client.post('/Dine360 Order', Body, {
headers: {
'Content-Type': 'application/json'
}
});
} catch (error) {
console.log("error", error)
}
// Clear and reset
alert('Order placed successfully!');
setCart([]);
setShowOrderModal(false);
setOrderStatus('pending');
};
const renderMenuItem = (menu) => {
console.log("menu", menu)
const cartItem = cart.find(item => item.name === menu.name);
const isInCart = !!cartItem;
return (
<div key={menu.name} className="col-xxl-3 col-md-6 user-grid-card">
<div className="position-relative border radius-16 overflow-hidden">
<div className="card cursor-pointer" onClick={() => {
setSelectedItem(menu);
getAllSidesGroupedByCategory(menu?.name)
setShowItemModal(true);
}}
>
<div className="card-body text-center p-3">
<img
src={menu.profileImg}
alt=""
className="border br-white border-width-2-px w-100-px h-100-px rounded-circle object-fit-cover"
/>
{/* <div className="w-100 max-h-150-px radius-0 overflow-hidden" >
<img alt="" className="w-100 h-150-px object-fit-cover" src="/assets/images/blog/blog5.png" style={{ height: "150px" }} />
</div> */}
<div className="p-0">
<h6 className="text-lg mb-1 mt-1">{menu.menuitemname}</h6>
<span className="text-secondary-light text-sm lh-sm mb-1">{menu.parent}</span>
<h6 className="text-md mb-0 mt-1">${menu.price.toFixed(2)}</h6>
</div>
{/* {isInCart ? (
<div className="d-flex align-items-center justify-content-center gap-2">
<button
className="btn btn-sm btn-outline-danger-500"
onClick={() => updateQuantity(menu.name, cartItem.quantity - 1)}
>
-
</button>
<span className="mx-2 border border-white px-3 py-1 radius-6">{cartItem.quantity}</span>
<button
className="btn btn-sm btn-outline-success-500"
onClick={() => updateQuantity(menu.name, cartItem.quantity + 1)}
>
+
</button>
</div>
) : (
<button
onClick={() => addToCart(menu)}
className="bg-danger-500 text-white p-10 text-sm btn-sm px-12 py-12 radius-8 d-flex align-items-center justify-content-center mt-2 fw-medium gap-2 w-100"
>
Add to Cart
</button>
)} */}
</div>
</div>
</div>
</div>
);
};
const cartItem = cart.find(item => item.name === selectedItem.name);
const isInCart = !!cartItem;
const quantity = cartItem?.quantity || 1;
console.log("catMenuActive", catMenuActive)
console.log("cartItem?.quantity", cartItem)
return (
<>
<div className="container-fluid" style={{ marginBottom: "100px" }}>
{
loading ? (
<PageLoader />
) : menuData?.length == 0 ? (
<PageNoData />
) : (
<div className="row gy-4">
{/* Menu Category - Always col-xxl-2 */}
<div className="col-xxl-2">
<div className="d-inline-block w-100">
<div className="card p-0 overflow-hidden position-relative radius-12 h-100">
<div className="card-body p-24">
<ul className="d-flex flex-column gap-2">
{catMenu.map((menu) => (
<li
className={`nav-item border rounded-2 px-3 py-3 bg-border-theme d-flex align-items-center gap-3 ${catMenuActive === menu.menuname ? "bg-theme " : ""
}`}
role="presentation"
key={menu?.name}
onClick={() => handleCatMenuClick(menu?.name)}
style={{ cursor: "pointer" }}
>
<img
src="/assets/images/menu/menu-icons/all-menu.png"
alt="all menu"
className="w-28-px h-28-px"
/>
<span className="line-height-1">{menu?.menuname}</span>
</li>
))}
</ul>
</div>
</div>
</div>
</div>
{/* Menu Items - col-xxl-10 if cart is empty, else col-xxl-7 */}
<div className="col-xxl-7">
<div className="card p-0 overflow-hidden position-relative radius-12 mb-3">
<div className="card-body p-24">
<ul className="d-flex gap-2 mb-0">
{menuData.map((menu) => (
<li
className={`nav-item border rounded-2 px-3 py-1 bg-outline-theme d-flex align-items-center gap-3 ${activeCategory === menu.name ? "bg-theme" : ""
}`}
role="presentation"
key={menu?.name}
onClick={() => handleMenuClick(menu)}
style={{ cursor: "pointer" }}
>
<img
src="/assets/images/menu/menu-icons/all-menu.png"
alt="all menu"
className="w-28-px h-28-px"
/>
<span className="line-height-1">{menu?.menucategoryname}</span>
</li>
))}
</ul>
</div>
</div>
<div className="row gy-4">
{menuItems?.menuitems_child?.map(renderMenuItem)}
</div>
</div>
{/* Cart - Show only if cart has items */}
{/* {cart.length > 0 && ( */}
<div className="col-xxl-3">
<div className="card p-0 overflow-hidden position-relative radius-12 h-100">
<div className="card-body p-24">
<h6 className="text-lg mb-3">POS Dine-in</h6>
<div className="d-flex flex-wrap align-items-center gap-4 mb-3">
<div className="d-flex flex-wrap align-items-center gap-3">
<button
type="button"
className="btn btn-primary-600 position-relative px-20 py-8 text-sm line-height-1 d-flex align-items-center"
>
Items
<span className="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-primary-600 border border-white">
{orderItems.length}
</span>
</button>
</div>
<div className="d-flex flex-wrap align-items-center gap-3">
<button
type="button"
className="btn btn-warning-600 position-relative px-20 py-8 text-sm line-height-1 d-flex align-items-center"
>
Table Name
{/* <span className="position-absolute top-0 end-0 translate-middle-y badge rounded-pill bg-danger-600">
99+
</span> */}
</button>
</div>
<div className="d-flex flex-wrap align-items-center gap-3">
<button
type="button"
className="btn btn-success-600 position-relative px-20 py-8 text-sm line-height-1 d-flex align-items-center"
>
Members
<span className="position-absolute top-0 end-0 translate-middle-y badge rounded-pill bg-success-600 border border-white ">
3
</span>
</button>
</div>
</div>
<div className="mb-1 border-bottom pb-3 mb-3">
<ul className="list-group radius-8">
<li className="list-group-item d-flex align-items-center justify-content-between border text-secondary-light p-6 bg-base border-bottom-0">
<div className="d-flex text-sm align-items-center gap-2">
<img className="w-20-px h-20-px rounded-circle" alt="" src="/assets/images/lists/list-img1.png" />
Contact Number
</div>
<span className="text-xs bg-success-100 text-success-600 radius-4 px-10 py-2 fw-semibold cursor-pointer" data-bs-toggle="tooltip" title="This is the contact number">Show</span>
</li>
<li className="list-group-item d-flex align-items-center justify-content-between border text-secondary-light p-6 bg-base">
<div className="d-flex align-items-center text-sm gap-2">
<img className="w-20-px h-20-px rounded-circle" alt="" src="/assets/images/lists/list-img2.png" />
Customer Info
</div>
<span className="text-xs bg-success-100 text-success-600 radius-4 px-10 py-2 fw-semibold cursor-pointer" data-bs-toggle="tooltip" title="Customer details here">Show</span>
</li>
</ul>
</div>
{orderItems.length === 0 ? (
<p className="text-muted">Your cart is empty.</p>
) : (
<>
{orderItems.map((item) => (
<div key={item.name} className="card bg-theme mb-3 border">
<div className="card-body p-3">
<div className="d-flex align-items-center gap-3">
<div className="flex-shrink-0">
<img
src={item.profileImg}
alt={item.menuitemname}
className="rounded-circle"
style={{
width: "60px",
height: "60px",
objectFit: "cover",
}}
/>
</div>
<div className="flex-grow-1">
<div className="d-flex justify-content-between align-items-center">
<div>
<h6 className="mb-0 text-md text-truncate">
{item.menuitemname}
</h6>
<p className="mb-0 text-sm">${item.price.toFixed(2)}</p>
</div>
<div>
<div className="text-end mb-2">
<button
className="btn btn-sm btn-link text-danger-500 p-0 ms-2"
onClick={() => removeFromCart(item.name)}
>
<Icon icon="mdi:delete" className="fs-5" />
</button>
</div>
<div className="d-flex align-items-center gap-1 mt-2">
<button
className="px-1 py-0 text-sm text-danger-500 border border-danger-500 radius-4"
onClick={() => updateQuantity(item.name, item.quantity - 1)}
>
-
</button>
<span className="mx-1 text-sm border border-white px-1 radius-4">{item.quantity}</span>
<button
className="px-1 py-0 text-sm text-success-500 radius-4 border border-success-500"
onClick={() => updateQuantity(item.name, item.quantity + 1)}
>
+
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
))}
<div className="order-summary border-top pt-3">
<button
className="btn btn-bg-theme w-100"
onClick={handlePlaceOrder}
>
Place Order
</button>
</div>
</>
)}
</div>
</div>
</div>
{/* )} */}
</div>
)
}
</div>
{showItemModal && selectedItem && (
<>
<div
className="modal-backdrop fade show"
style={{
position: 'fixed',
top: 0, left: 0, right: 0, bottom: 0,
backgroundColor: 'rgba(0,0,0,0.5)',
zIndex: 1040
}}
onClick={() => setShowItemModal(false)}
/>
<div className="modal fade show" style={{ display: 'block', zIndex: 1050 }}>
<div className="modal-dialog modal-xl modal-dialog-centered">
<div className="modal-content radius-12 overflow-hidden">
<div className="modal-header border-0">
<h6 className="modal-title text-lg">{selectedItem.menuitemname}</h6>
<button type="button" className="btn-close" onClick={() => setShowItemModal(false)} />
</div>
<div className="modal-body">
<div className="row gy-3">
{/* Col 1 - Image */}
<div className="col-md-4">
<img
src="https://images.immediate.co.uk/production/volatile/sites/30/2020/08/chorizo-mozarella-gnocchi-bake-cropped-9ab73a3.jpg?quality=90&resize=700,636"
alt={selectedItem.menuitemname}
className="w-100 rounded"
style={{ objectFit: 'cover' }}
/>
</div>
{/* Col 2 - Size + Quantity */}
<div className="col-md-4">
<h6 className="mb-2 text-lg">Choose Size</h6>
<select className="form-select mb-3">
<option>Regular</option>
<option>Large</option>
<option>Family</option>
</select>
<h6 className="mb-1 text-lg">Quantity</h6>
{isInCart ? (
<div className="d-flex align-items-center gap-2">
<button
className="btn btn-sm btn-outline-danger-500"
onClick={() => updateQuantity(selectedItem.name, cartItem.quantity - 1)}
>
-
</button>
<span className="mx-2 border border-white px-3 py-1 radius-6">{cartItem.quantity}</span>
<button
className="btn btn-sm btn-outline-success-500"
onClick={() => updateQuantity(selectedItem.name, cartItem.quantity + 1)}
>
+
</button>
</div>
) : (
<button
onClick={() => addToCart(selectedItem)}
className="btn-bg-theme text-white p-10 text-sm btn-sm px-14 py-12 radius-8 d-flex align-items-center justify-content-center mt-2 fw-medium gap-2 w-100"
>
Add to Cart
</button>
)}
</div>
{/* Col 3 - Extras */}
{/* Col 3 - Extras + Order Button + Total */}
<div className="col-md-4">
<h6 className="mb-2 text-lg">Add Extras</h6>
<div className="d-flex flex-wrap gap-3 mb-3">
<button
type="button"
className={`btn text-sm btn-sm px-14 py-6 radius-8 d-flex justify-content-between align-items-center gap-2 border ${selectedExtras.includes('cheese') ? 'btn-bg-theme text-white' : 'btn-outline-theme'}`}
onClick={() => toggleExtra('cheese')}
>
<span>Extra Cheese</span>
<span>$1.50</span>
</button>
<button
type="button"
className={`btn text-sm btn-sm px-14 py-6 d-flex justify-content-between align-items-center gap-2 border ${selectedExtras.includes('sauce') ? 'btn-bg-theme text-white' : 'btn-outline-theme'}`}
onClick={() => toggleExtra('sauce')}
>
<span>Spicy Sauce</span>
<span>$0.75</span>
</button>
</div>
<h6 className="mb-1 text-lg">Drinks</h6>
<div className="d-flex flex-column gap-2 mb-2">
<button
type="button"
className={`btn text-sm btn-sm px-14 py-6 d-flex justify-content-between align-items-center border ${selectedDrink === 'coke' ? 'btn-bg-theme text-white' : 'btn-outline-theme'}`}
onClick={() => selectDrink('coke')}
>
<span>Coke</span>
<span>$2.00</span>
</button>
<button
type="button"
className={`btn text-sm btn-sm px-14 py-6 d-flex justify-content-between align-items-center border ${selectedDrink === 'pepsi' ? 'btn-bg-theme text-white' : 'btn-outline-theme'}`}
onClick={() => selectDrink('pepsi')}
>
<span>Pepsi</span>
<span>$2.00</span>
</button>
</div>
<div className="bg-success-100 p-3 mb-3 mt-3 rounded">
<h6 className="mb-2">Total: <span className="text-success-500">$12.99</span></h6>
</div>
<button className="btn btn-bg-theme w-100 mb-3 text-white" onClick={handleAddToOrder}>
Add to Order
</button>
</div>
</div>
</div>
{/*
<div className="modal-footer border-0">
<button className="btn btn-danger-500 w-100 text-white">Add to Order</button>
</div> */}
</div>
</div>
</div>
</>
)}
{/* Order Confirmation Modal */}
{
showOrderModal && (
<>
<div
className="modal-backdrop fade show"
style={{
position: 'fixed',
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundColor: 'rgba(0, 0, 0, 0.5)',
zIndex: 1040
}}
onClick={() => setShowOrderModal(false)}
/>
<div
className="modal fade show"
style={{
display: 'block',
zIndex: 1050
}}
>
<div className="modal-dialog modal-dialog-centered modal-lg">
<div className="modal-content shadow-lg">
<div className="modal-header border-0">
<h6 className="modal-title text-lg">Confirm Your Order</h6>
<button
type="button"
className="btn-close"
onClick={() => setShowOrderModal(false)}
></button>
</div>
<div className="modal-body">
<div className="order-items mb-4">
<div className="d-flex justify-content-between align-items-center mb-3">
<p className="fw-bold mb-0">Order Items:</p>
<select
className="form-select form-select-sm w-auto"
value={orderStatus}
onChange={(e) => setOrderStatus(e.target.value)}
>
<option value="pending">Pending</option>
<option value="preparing">Preparing</option>
<option value="ready">Ready for Pickup</option>
<option value="completed">Completed</option>
<option value="cancelled">Cancelled</option>
</select>
</div>
{cart.map((item) => (
<div key={item.name} className="card bg-tb-lilac mb-2 border">
<div className="card-body p-3">
<div className="d-flex align-items-center gap-3">
<div className="flex-shrink-0">
<img
src={item.profileImg}
alt={item.name}
className="rounded-circle"
style={{ width: '50px', height: '50px', objectFit: 'cover' }}
/>
</div>
<div className="flex-grow-1">
<div className="d-flex justify-content-between align-items-center">
<div>
<h6 className="mb-0 text-md fw-semibold">{item.menuitemname}</h6>
<p className="mb-0 text-sm text-secondary">Quantity: {item.quantity}</p>
</div>
<div className="text-end">
<h6 className="mb-0 text-md fw-semibold">${(item.price * item.quantity).toFixed(2)}</h6>
<p className="mb-0 text-sm text-secondary">${item.price.toFixed(2)} each</p>
</div>
</div>
</div>
</div>
</div>
</div>
))}
</div>
<div className="order-summary border-top pt-3">
<div className="d-flex justify-content-between mb-2">
<span>Subtotal:</span>
<span>${calculateSubtotal().toFixed(2)}</span>
</div>
<div className="d-flex justify-content-between mb-2">
<span>HST Tax (13%):</span>
<span>${calculateTax().toFixed(2)}</span>
</div>
<div className="d-flex justify-content-between mb-3 fw-bold">
<span>Total:</span>
<span>${calculateTotal().toFixed(2)}</span>
</div>
</div>
</div>
<div className="modal-footer border-0">
<button
type="button"
className="btn border border-danger-500 text-danger-500 text-sm"
onClick={() => setShowOrderModal(false)}
>
Cancel
</button>
<button
type="button"
className="btn btn-danger-500 text-sm"
onClick={confirmOrder}
>
Confirm Order
</button>
</div>
</div>
</div>
</div>
</>
)
}
</>
);
};
const MenuItemsCategory = (() => {
return (
<MasterLayout>
<Breadcrumb title="Menu Items" />
<Suspense fallback={<PageLoader />}>
<MenuItemsCategoryInner />
</Suspense>
</MasterLayout>
)
})
export default MenuItemsCategory;