Topics covering webhook creation & management, event handling, Pub/Sub, and Eventbridge, in Shopify apps.
Hi, I can't move on.
I need that when a product is added to the cart, a check is made on the cart and if the total is equal to or greater than €77, a product 'X' is automatically added if it is not already present.
the code is good but has some errors.
1 The first time I add a product to the cart, product YYY is never added because the check on the cart is done when the value is still 0.
2. However, if I already have a product for example worth €100 in my cart and I add a second product, product 'X' is added but the second product is not added
<script>
document.addEventListener('DOMContentLoaded', function() {
console.log("Script caricato correttamente.");
let isAddingProduct = false;
document.querySelectorAll('form[action^="/cart/add"]').forEach(function(form) {
form.addEventListener('submit', function(event) {
console.log("Form di aggiunta al carrello intercettato.");
if (isAddingProduct) {
console.log("Operazione di aggiunta già in corso, prevenire duplicazioni.");
event.preventDefault();
return;
}
event.preventDefault();
var formData = new FormData(form);
var addedProductId = formData.get('id');
var addedProductQuantity = formData.get('quantity') || 1;
console.log("ID prodotto aggiunto:", addedProductId);
console.log("Quantità prodotto aggiunto:", addedProductQuantity);
isAddingProduct = true; // Imposta lo stato di aggiunta in corso
fetch('/cart.js')
.then(response => {
if (!response.ok) {
return response.text().then(text => {
throw new Error("Errore nella risposta del carrello: " + response.statusText + " - " + text);
});
}
return response.json();
})
.then(cart => {
console.log("Dati del carrello:", cart);
var cartTotal = (cart.total_price / 100);
console.log("Totale del carrello (con prodotto aggiunto):", cartTotal);
var productYYYId = '49211712569640';
console.log("ID prodotto YYY:", productYYYId);
var productYYYInCart = cart.items.some(item => item.id == productYYYId);
console.log("Prodotto YYY nel carrello?", productYYYInCart);
if (cartTotal >= 77 && !productYYYInCart) {
console.log("Aggiunta del prodotto YYY al carrello.");
return fetch('/cart/add.js', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id: productYYYId, quantity: 1 })
});
}
})
.then(() => {
// Aggiorna il cart-drawer
if (typeof openCartDrawer === 'function') {
openCartDrawer();
} else {
console.log("Funzione openCartDrawer non definita.");
}
})
.catch(error => {
console.error("Errore durante la richiesta del carrello:", error);
})
.finally(() => {
isAddingProduct = false;
});
});
});
});
</script>