-
-
-
@@ -728,249 +756,477 @@
+
+
+
+
+
+
+
+
+
+
Are you sure you want to clear your entire cart?
+
This action cannot be undone. All items will be removed from your cart.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Are you sure you want to remove this item from cart?
+
This action cannot be undone. The item will be removed from your cart.
+
+
+
+
+
+
@include('layouts.partials/footer')
@endsection
@section('scripts')
-
+ // Add backdrop
+ const backdrop = document.createElement('div');
+ backdrop.className = 'modal-backdrop fade show';
+ backdrop.id = 'clearCartBackdrop';
+ document.body.appendChild(backdrop);
+
+ // Handle close buttons
+ const closeButtons = modalElement.querySelectorAll('[data-bs-dismiss="modal"]');
+ closeButtons.forEach(button => {
+ button.onclick = hideModal;
+ });
+
+ // Handle backdrop click
+ backdrop.onclick = hideModal;
+ }
+ }
+ }
+
+ // Function to hide the clear cart modal
+ function hideModal() {
+ const modalElement = document.getElementById('clearCartModal');
+ const backdrop = document.getElementById('clearCartBackdrop');
+
+ if (modalElement) {
+ modalElement.style.display = 'none';
+ modalElement.classList.remove('show');
+ modalElement.removeAttribute('aria-modal');
+ modalElement.removeAttribute('role');
+ }
+
+ if (backdrop) {
+ backdrop.remove();
+ }
+ }
+
+ // Function to actually clear the cart (called when confirm button is clicked)
+ async function executeClearCart() {
+ try {
+ const response = await fetch('cart/clear', {
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute(
+ 'content'),
+ 'Accept': 'application/json'
+ }
+ });
+
+ if (response.ok) {
+ const result = await response.json();
+ if (result.success) {
+ // Hide modal first
+ hideModal();
+
+ // Remove all cart rows from the table
+ const cartRows = document.querySelectorAll('tbody tr[data-cart-id]');
+ cartRows.forEach(row => row.remove());
+
+ // Update cart count in header
+ updateCartCount();
+
+ // Recalculate totals (should be zero now)
+ calculateCartTotals();
+
+ // Optionally show a success message
+ console.log('Cart cleared successfully');
+ }
+ } else {
+ console.error('Error clearing cart:', await response.json());
+ }
+ } catch (error) {
+ console.error('Network error:', error);
+ }
+ }
+
@endsection
diff --git a/resources/views/components/layout/header.blade.php b/resources/views/components/layout/header.blade.php
index b3ec196..dea96e2 100644
--- a/resources/views/components/layout/header.blade.php
+++ b/resources/views/components/layout/header.blade.php
@@ -258,15 +258,16 @@
style="--cz-badge-padding-y: .25em; --cz-badge-padding-x: .42em">{{ auth()->check() ? \App\Repositories\Member\Cart\MemberCartRepository::getCount() : 0 }}
--}}
-
- {{ auth()->check() ? \App\Repositories\Member\Cart\MemberCartRepository::getCount() : 0 }}
+ @if (auth()->check() && \App\Repositories\Member\Cart\MemberCartRepository::getCount() > 0)
+ {{ auth()->check() ? \App\Repositories\Member\Cart\MemberCartRepository::getCount() : 0 }}
+ @endif
-
+
diff --git a/routes/web.php b/routes/web.php
index 05656e8..f04442e 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -91,6 +91,7 @@ Route::middleware(['auth'])->prefix('/cart')->group(function () {
Route::get('/', [CartController::class, 'index'])->name('cart.index');
Route::post('/', [CartController::class, 'add'])->name('cart.add');
Route::put('/{id}', [CartController::class, 'update'])->name('cart.update');
+ Route::delete('/clear', [CartController::class, 'clear'])->name('cart.clear');
Route::delete('/{id}', [CartController::class, 'delete'])->name('cart.delete');
Route::get('/count', [CartController::class, 'count'])->name('cart.count');
});
\ No newline at end of file