diff --git a/RestroHub-FrontEnd/src/components/customer/CartDrawer.jsx b/RestroHub-FrontEnd/src/components/customer/CartDrawer.jsx new file mode 100644 index 00000000..7f1d8188 --- /dev/null +++ b/RestroHub-FrontEnd/src/components/customer/CartDrawer.jsx @@ -0,0 +1,197 @@ +import { useCart } from '@context/CartContext'; + +const formatPrice = (price) => { + const num = parseFloat(price); + return isNaN(num) ? '0.00' : num.toFixed(2); +}; + +const CartDrawer = ({ isOpen, onClose }) => { + const { items, removeItem, updateQuantity, clearCart, itemCount, totalAmount } = useCart(); + + if (!isOpen) return null; + + return ( + <> +
+ +
+ + +
+

+ Your Cart ({itemCount}) +

+ +
+ + {items.length === 0 ? ( +
+ 🛒 +

+ Your cart is empty +

+

+ Add items from the menu to get started +

+
+ ) : ( + <> +
+ {items.map((item) => ( +
+
+
+ +

+ {item.name} +

+
+

+ ₹{formatPrice(item.price)} +

+
+ +
+
+ + + {item.quantity} + + +
+ +
+
+ ))} +
+ +
+
+ + Total + + + ₹{formatPrice(totalAmount)} + +
+
+ + +
+
+ + )} +
+ + ); +}; + +export default CartDrawer; diff --git a/RestroHub-FrontEnd/src/components/customer/MenuSection.jsx b/RestroHub-FrontEnd/src/components/customer/MenuSection.jsx index bb061153..7971e1a9 100644 --- a/RestroHub-FrontEnd/src/components/customer/MenuSection.jsx +++ b/RestroHub-FrontEnd/src/components/customer/MenuSection.jsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; import { useSiteData } from '@context/SiteContext.jsx'; +import { useCart } from '@context/CartContext'; // ============================================ // MENU SECTION COMPONENT @@ -8,6 +9,7 @@ import { useSiteData } from '@context/SiteContext.jsx'; const MenuSection = () => { const { siteData } = useSiteData(); + const { addItem } = useCart(); const [activeCategory, setActiveCategory] = useState('starters'); if (!siteData) return null; @@ -54,6 +56,18 @@ const MenuSection = () => { ))}
)} +

{item.price === 'varies' ? item.price : `$${item.price}`} @@ -204,6 +218,24 @@ const MenuSection = () => { color: var(--color-primary); white-space: nowrap; } + .menu-add-btn { + margin-top: var(--spacing-sm, 8px); + padding: 6px 16px; + font-size: var(--text-xs, 12px); + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; + border: 1px solid var(--color-primary, #f59e0b); + background: transparent; + color: var(--color-primary, #f59e0b); + border-radius: var(--radius-sm, 4px); + cursor: pointer; + transition: all var(--transition-normal, 0.3s); + } + .menu-add-btn:hover { + background: var(--color-primary, #f59e0b); + color: #fff; + } @media (min-width: 768px) { .menu-item-price { diff --git a/RestroHub-FrontEnd/src/components/customer/Navigation.jsx b/RestroHub-FrontEnd/src/components/customer/Navigation.jsx index 99680745..f4024208 100644 --- a/RestroHub-FrontEnd/src/components/customer/Navigation.jsx +++ b/RestroHub-FrontEnd/src/components/customer/Navigation.jsx @@ -1,9 +1,11 @@ import React, { useState, useEffect } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { useSiteData } from '@context/SiteContext.jsx'; +import { useCart } from '@context/CartContext'; -const Navigation = () => { +const Navigation = ({ onCartClick }) => { const { siteData } = useSiteData(); + const { itemCount } = useCart(); const navigate = useNavigate(); const [scrolled, setScrolled] = useState(false); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); @@ -45,6 +47,23 @@ const Navigation = () => { ))} + +