From 936d0b763cd81f59a043da6be6770423d75e890d Mon Sep 17 00:00:00 2001 From: Vula Builder Date: Sun, 11 Oct 2026 14:20:29 +0000 Subject: [PATCH] Deploy --- src/components/shop/CartDrawer.tsx | 134 +++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/components/shop/CartDrawer.tsx diff --git a/src/components/shop/CartDrawer.tsx b/src/components/shop/CartDrawer.tsx new file mode 100644 index 0000000..3ce23f8 --- /dev/null +++ b/src/components/shop/CartDrawer.tsx @@ -0,0 +1,134 @@ +'use client' +import { useState, useEffect } from 'react' +import Link from 'next/link' +import { X, ShoppingCart, Plus, Minus, Trash2, Package, ArrowRight } from 'lucide-react' +import { useVulaCart } from '@/hooks/useVulaCart' +import { useCustomerAuth } from '@/hooks/useCustomerAuth' + +const fmt = (n: number) => `R${(n / 100).toFixed(2)}` + +export default function CartDrawer() { + const [isOpen, setIsOpen] = useState(false) + const { items, subtotal, itemCount, updateQty, removeFromCart } = useVulaCart() + const { customer, isAuthenticated } = useCustomerAuth() + + useEffect(() => { + const open = () => setIsOpen(true) + window.addEventListener('cart-drawer-open', open) + return () => window.removeEventListener('cart-drawer-open', open) + }, []) + + useEffect(() => { + document.body.style.overflow = isOpen ? 'hidden' : '' + return () => { document.body.style.overflow = '' } + }, [isOpen]) + + const close = () => setIsOpen(false) + + return ( + <> + {isOpen && ( +