179 lines
6.8 KiB
JavaScript
179 lines
6.8 KiB
JavaScript
document.addEventListener('DOMContentLoaded', () => {
|
|
let cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
|
|
|
// Get modal and cart-related elements
|
|
const modal = document.getElementById('cart-modal');
|
|
const closeModal = document.querySelector('.close-modal');
|
|
const cartItemsContainer = document.getElementById('cart-items');
|
|
const cartTotalContainer = document.getElementById('cart-total');
|
|
const clearCartModalButton = document.getElementById('clear-cart-modal-btn');
|
|
const processOrderModalButton = document.getElementById('process-order-modal-btn');
|
|
|
|
// Custom confirmation modals for clear cart and process order
|
|
const confirmationModal = document.getElementById('confirmation-modal');
|
|
const confirmationMessage = document.getElementById('confirmation-message');
|
|
const confirmationCloseButton = document.getElementById('confirmation-close-btn');
|
|
const confirmationConfirmButton = document.getElementById('confirmation-confirm-btn');
|
|
|
|
// Buttons
|
|
const shoppingCartButton = document.getElementById('shopping-cart');
|
|
const cartDetailsButton = document.getElementById('cart-details');
|
|
|
|
// Custom alert modal for item added
|
|
const itemAddedModal = document.getElementById('item-added-modal');
|
|
const itemAddedMessage = document.getElementById('item-added-message');
|
|
const itemAddedClose = document.getElementById('item-added-close');
|
|
|
|
// Final confirmation modal for success messages
|
|
const finalConfirmationModal = document.getElementById('final-confirmation-modal');
|
|
const finalConfirmationMessage = document.getElementById('final-confirmation-message');
|
|
const finalConfirmationCloseButton = document.getElementById('final-confirmation-close-btn');
|
|
|
|
// Function to render the cart
|
|
function renderCart() {
|
|
cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
|
cartItemsContainer.innerHTML = ''; // Clear existing items
|
|
let total = 0;
|
|
|
|
if (cart.length === 0) {
|
|
cartItemsContainer.innerHTML = '<li>Your cart is empty.</li>';
|
|
cartTotalContainer.textContent = '';
|
|
return;
|
|
}
|
|
|
|
cart.forEach(item => {
|
|
const itemTotal = item.price * item.quantity;
|
|
total += itemTotal;
|
|
|
|
const listItem = document.createElement('li');
|
|
listItem.textContent = `${item.name} x ${item.quantity} - $${itemTotal.toFixed(2)}`;
|
|
cartItemsContainer.appendChild(listItem);
|
|
});
|
|
|
|
cartTotalContainer.textContent = `Subtotal: $${total.toFixed(2)}`;
|
|
}
|
|
|
|
// Show cart modal with current cart content
|
|
function showModal() {
|
|
renderCart(); // Always render the latest cart
|
|
modal.style.display = 'flex'; // Show the cart modal
|
|
}
|
|
|
|
// Show confirmation modal for actions (clear or process order)
|
|
function showConfirmationModal(message, action) {
|
|
confirmationMessage.textContent = message;
|
|
confirmationModal.style.display = 'flex'; // Show the confirmation modal
|
|
|
|
// Confirm action on the "Confirm" button
|
|
confirmationConfirmButton.onclick = () => {
|
|
action(); // Execute the passed action (clear cart, process order)
|
|
confirmationModal.style.display = 'none'; // Close the confirmation modal after confirming
|
|
};
|
|
|
|
// Close confirmation modal without performing any action
|
|
confirmationCloseButton.onclick = () => {
|
|
confirmationModal.style.display = 'none';
|
|
};
|
|
}
|
|
|
|
// Show final confirmation modal with success message
|
|
function showFinalConfirmationModal(message) {
|
|
finalConfirmationMessage.textContent = message;
|
|
finalConfirmationModal.style.display = 'flex'; // Show the final confirmation modal
|
|
finalConfirmationCloseButton.onclick = () => {
|
|
finalConfirmationModal.style.display = 'none'; // Close final confirmation modal
|
|
};
|
|
}
|
|
|
|
// Show custom modal when item is added to cart
|
|
function showItemAddedModal(message) {
|
|
itemAddedMessage.textContent = message; // Set message dynamically
|
|
itemAddedModal.style.display = 'flex'; // Show the modal
|
|
itemAddedClose.addEventListener('click', () => {
|
|
itemAddedModal.style.display = 'none'; // Close the modal
|
|
});
|
|
}
|
|
|
|
// Attach event listeners to both cart buttons
|
|
[shoppingCartButton, cartDetailsButton].forEach(button => {
|
|
if (button) {
|
|
button.addEventListener('click', showModal); // Open modal when clicked
|
|
}
|
|
});
|
|
|
|
// Close modal when clicking outside of it
|
|
window.addEventListener('click', event => {
|
|
if (event.target === modal) {
|
|
modal.style.display = 'none';
|
|
}
|
|
});
|
|
|
|
// Close the modal by clicking the close button (for cart modal)
|
|
if (closeModal) {
|
|
closeModal.addEventListener('click', () => {
|
|
modal.style.display = 'none';
|
|
});
|
|
}
|
|
|
|
// Add to cart functionality
|
|
const addToCartButtons = document.querySelectorAll('.add-to-cart-btn');
|
|
addToCartButtons.forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
const productId = parseInt(button.dataset.productId, 10);
|
|
const product = products.find(item => item.id === productId);
|
|
|
|
if (product) {
|
|
const existingProduct = cart.find(item => item.id === productId);
|
|
|
|
if (existingProduct) {
|
|
existingProduct.quantity++;
|
|
} else {
|
|
cart.push({ ...product, quantity: 1 });
|
|
}
|
|
|
|
sessionStorage.setItem('cart', JSON.stringify(cart)); // Save cart to session storage
|
|
showItemAddedModal(`${product.name} has been added to the cart!`); // Show custom modal
|
|
}
|
|
});
|
|
});
|
|
|
|
// Event listener for Clear Cart button in the modal
|
|
if (clearCartModalButton) {
|
|
clearCartModalButton.addEventListener('click', () => {
|
|
showConfirmationModal('Are you sure you want to clear the cart?', () => {
|
|
sessionStorage.removeItem('cart');
|
|
cart = [];
|
|
renderCart(); // Re-render cart after clearing it
|
|
showFinalConfirmationModal('Cart has been cleared!'); // Show final confirmation for cart clearing
|
|
});
|
|
});
|
|
}
|
|
|
|
// Event listener for Process Order button in the modal
|
|
if (processOrderModalButton) {
|
|
processOrderModalButton.addEventListener('click', () => {
|
|
if (cart.length === 0) {
|
|
showItemAddedModal('Your cart is empty. Please add items to the cart before processing the order.');
|
|
return;
|
|
}
|
|
|
|
showConfirmationModal('Are you sure you want to process your order?', () => {
|
|
const receiptNumber = Math.floor(Math.random() * 1000000); // Generate receipt number
|
|
showFinalConfirmationModal(`Thank you for your order!\nYour receipt number is ${receiptNumber}.`);
|
|
sessionStorage.removeItem('cart');
|
|
cart = [];
|
|
renderCart(); // Re-render cart after processing the order
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
const allCloseButtons = document.querySelectorAll('.close-modal');
|
|
allCloseButtons.forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
// Close the parent modal of the button clicked
|
|
const modal = button.closest('.modal');
|
|
modal.style.display = 'none';
|
|
});
|
|
});
|