// Sky Art Shop - Shopping Cart Functions // Add item to cart function addToCart(id, name, price, imageUrl = null) { // Get existing cart from localStorage let cart = JSON.parse(localStorage.getItem("cart") || "[]"); // Check if item already exists const existingItem = cart.find((item) => item.id === id); if (existingItem) { existingItem.quantity++; // Update imageUrl if it was null before if (!existingItem.imageUrl && imageUrl) { existingItem.imageUrl = imageUrl; } } else { cart.push({ id, name, price, quantity: 1, imageUrl }); } // Save cart localStorage.setItem("cart", JSON.stringify(cart)); console.log("Cart updated:", cart); // Show confirmation showCartNotification(`${name} added to cart!`); updateCartCount(); } // Remove item from cart function removeFromCart(id) { let cart = JSON.parse(localStorage.getItem("cart") || "[]"); cart = cart.filter((item) => item.id !== id); localStorage.setItem("cart", JSON.stringify(cart)); updateCartCount(); } // Update cart item quantity function updateCartQuantity(id, quantity) { let cart = JSON.parse(localStorage.getItem("cart") || "[]"); const item = cart.find((item) => item.id === id); if (item) { item.quantity = quantity; if (quantity <= 0) { cart = cart.filter((item) => item.id !== id); } } localStorage.setItem("cart", JSON.stringify(cart)); updateCartCount(); } // Get cart items function getCart() { return JSON.parse(localStorage.getItem("cart") || "[]"); } // Get cart total function getCartTotal() { const cart = getCart(); return cart.reduce((total, item) => total + item.price * item.quantity, 0); } // Update cart count badge function updateCartCount() { const cart = getCart(); const count = cart.reduce((total, item) => total + item.quantity, 0); // Update old badge (if exists) const badge = document.getElementById("cart-count"); if (badge) { badge.textContent = count; badge.style.display = count > 0 ? "inline" : "none"; } // Update navbar cart badge const navCartBadge = document.querySelector("#cartBtn .badge"); if (navCartBadge) { navCartBadge.textContent = count; navCartBadge.style.display = count > 0 ? "block" : "none"; } } // Show cart notification function showCartNotification(message) { const notification = document.createElement("div"); notification.className = "cart-notification"; notification.textContent = message; notification.style.cssText = ` position: fixed; top: 80px; right: 20px; background: #4CAF50; color: white; padding: 15px 25px; border-radius: 5px; box-shadow: 0 4px 6px rgba(0,0,0,0.2); z-index: 10000; animation: slideInFromTop 0.3s ease; `; document.body.appendChild(notification); setTimeout(() => { notification.style.animation = "slideOut 0.3s ease"; setTimeout(() => notification.remove(), 300); }, 3000); } // Clear entire cart function clearCart() { localStorage.removeItem("cart"); updateCartCount(); } // ==================================== // Wishlist Functions // ==================================== // Add item to wishlist function addToWishlist(id, name, price, imageUrl) { let wishlist = JSON.parse(localStorage.getItem("wishlist") || "[]"); const existingItem = wishlist.find((item) => item.id === id); if (existingItem) { showWishlistNotification(`${name} is already in your wishlist!`); return; } wishlist.push({ id, name, price, imageUrl }); localStorage.setItem("wishlist", JSON.stringify(wishlist)); console.log("Wishlist updated:", wishlist); showWishlistNotification(`${name} added to wishlist!`); updateWishlistCount(); } // Remove item from wishlist function removeFromWishlist(id) { let wishlist = JSON.parse(localStorage.getItem("wishlist") || "[]"); wishlist = wishlist.filter((item) => item.id !== id); localStorage.setItem("wishlist", JSON.stringify(wishlist)); updateWishlistCount(); } // Get wishlist items function getWishlist() { return JSON.parse(localStorage.getItem("wishlist") || "[]"); } // Update wishlist count badge function updateWishlistCount() { const wishlist = getWishlist(); const count = wishlist.length; const navWishlistBadge = document.querySelector("#wishlistBtn .badge"); const wishlistIcon = document.querySelector("#wishlistBtn i"); if (navWishlistBadge) { navWishlistBadge.textContent = count; navWishlistBadge.style.display = count > 0 ? "block" : "none"; } // Change heart icon based on wishlist status if (wishlistIcon) { if (count > 0) { wishlistIcon.className = "bi bi-heart-fill"; wishlistIcon.style.color = "#e74c3c"; } else { wishlistIcon.className = "bi bi-heart"; wishlistIcon.style.color = ""; } } } // Show wishlist notification function showWishlistNotification(message) { const notification = document.createElement("div"); notification.className = "wishlist-notification"; notification.textContent = message; notification.style.cssText = ` position: fixed; top: 80px; right: 20px; background: #E91E63; color: white; padding: 15px 25px; border-radius: 5px; box-shadow: 0 4px 6px rgba(0,0,0,0.2); z-index: 10000; animation: slideInFromTop 0.3s ease; `; document.body.appendChild(notification); setTimeout(() => { notification.style.animation = "slideOut 0.3s ease"; setTimeout(() => notification.remove(), 300); }, 3000); } // Clear entire wishlist function clearWishlist() { localStorage.removeItem("wishlist"); updateWishlistCount(); } // ==================================== // Dropdown Functions // ==================================== // Render cart dropdown function renderCartDropdown() { const cart = getCart(); const cartItems = document.getElementById("cartItems"); const cartTotal = document.getElementById("cartTotal"); if (!cartItems) return; if (cart.length === 0) { cartItems.innerHTML = '

Your cart is empty

'; if (cartTotal) cartTotal.textContent = "$0.00"; return; } console.log("Rendering cart:", cart); cartItems.innerHTML = cart .map((item) => { const imgSrc = item.imageUrl || "/assets/images/placeholder.jpg"; console.log("Cart item image URL:", imgSrc); return ` `; }) .join(""); if (cartTotal) { const total = getCartTotal(); cartTotal.textContent = `$${total.toFixed(2)}`; } } // Render wishlist dropdown function renderWishlistDropdown() { const wishlist = getWishlist(); const wishlistItems = document.getElementById("wishlistItems"); if (!wishlistItems) return; if (wishlist.length === 0) { wishlistItems.innerHTML = '

Your wishlist is empty

'; return; } console.log("Rendering wishlist:", wishlist); wishlistItems.innerHTML = wishlist .map((item) => { const imgSrc = item.imageUrl || "/assets/images/placeholder.jpg"; console.log("Wishlist item image URL:", imgSrc); return ` `; }) .join(""); } // Remove from cart via dropdown function removeFromCartDropdown(id) { removeFromCart(id); renderCartDropdown(); updateCartCount(); } // Remove from wishlist via dropdown function removeFromWishlistDropdown(id) { removeFromWishlist(id); renderWishlistDropdown(); updateWishlistCount(); } // Toggle dropdown visibility function toggleDropdown(dropdownId) { const dropdown = document.getElementById(dropdownId); if (!dropdown) return; // Close other dropdowns document.querySelectorAll(".icon-dropdown").forEach((d) => { if (d.id !== dropdownId) { d.classList.remove("show"); } }); dropdown.classList.toggle("show"); // Render content when opening if (dropdown.classList.contains("show")) { if (dropdownId === "cartDropdown") { renderCartDropdown(); } else if (dropdownId === "wishlistDropdown") { renderWishlistDropdown(); } } } // Close cart/wishlist dropdowns when clicking outside document.addEventListener("click", function (e) { if ( !e.target.closest(".dropdown-container") && !e.target.closest(".nav-toggle") ) { document.querySelectorAll(".icon-dropdown").forEach((d) => { d.classList.remove("show"); }); } }); // Initialize cart and wishlist count on page load document.addEventListener("DOMContentLoaded", function () { updateCartCount(); updateWishlistCount(); // Add click handlers for dropdown toggles const cartBtn = document.getElementById("cartBtn"); const wishlistBtn = document.getElementById("wishlistBtn"); if (cartBtn) { cartBtn.addEventListener("click", function (e) { e.preventDefault(); toggleDropdown("cartDropdown"); }); } if (wishlistBtn) { wishlistBtn.addEventListener("click", function (e) { e.preventDefault(); toggleDropdown("wishlistDropdown"); }); } });