In the cart, quantity. I need to disable the decrement button otherwise I get an error and the Product is lost when quantity goes below one. help me please give a solution,
This is the cart
cart.hbs
<button type="button" class="quantity-left-minus btn btn-danger btn-number" onclick="changeQuandity('','','',-1)">
<span class="glyphicon glyphicon-minus"></span>
</button>
<span class="text-center" name=" quantity" id=""></span>
<button type="button" class="quantity-right-plus btn btn-success btn-number" onclick="changeQuandity('','','',1)">
<span class="glyphicon glyphicon-plus">
</button>
and also am using ajax in hbs; here am passing quantity, count and URL,
<script>
function changeQuandity(cartId, proId, userId, count) {
let quantity = parseInt(document.getElementById(proId).innerHTML)
count = parseInt(count)
console.log(userId)
$.ajax({
url: '/change-product-quandity',
data: {
user: userId,
cart: cartId,
product: proId,
count: count,
quantity: quantity,
},
method: 'post',
success: (response) => {
location.reload();
{
document.getElementById(proId).innerHTML = quantity + count
document.getElementById('total').innerHTML = response.total
}
}
})
}
</script>
here am using the aggregate method, and, the changeproductQuandity and get getTotalAmount count and quantity details are here,
userhelper.js
addToCart:(proId,userId)=>{
let proObj={
item:objectId(proId),
quantity:1,
}
return new Promise(async(resolve,reject)=>{
let userCart=await db.get().collection(collection.CART_COLLECTION).findOne({user:objectId(userId)})
if(userCart){
let proExist=userCart.products.findIndex(product=> product.item==proId)
console.log('proExist',proExist);
if(proExist!=-1){
db.get().collection(collection.CART_COLLECTION)
.updateOne({user:objectId(userId),'products.item':objectId(proId)},
{
$inc:{'products.$.quantity':1}
}
).then(()=>{
resolve()
})
}else{
db.get().collection(collection.CART_COLLECTION)
.updateOne({user:objectId(userId)},
{
$push:{products:proObj}
}
).then((response)=>{
resolve()
})
}
}else{
let cartObj={
user:objectId(userId),
products:[proObj]
}
db.get().collection(collection.CART_COLLECTION).insertOne (cartObj).then((response)=>{
resolve()
})
}
})
},
getCartProducts:(userId)=>{
return new Promise(async(resolve,reject)=>{
let cartItems=await db.get().collection(collection.CART_COLLECTION).aggregate([
{
$match:{user:objectId(userId)}
},
{
$unwind:'$products'
},{
$project:{
item:'$products.item',
quantity:'$products.quantity'
}
},
{
$lookup:{
from:collection.PRODUCT_COLLECTION,
localField:'item',
foreignField:'_id',
as:'product'
}
},
{
$project:{
item:1,quantity:1,product:{$arrayElemAt:['$product',0]}
}
}
]).toArray()
resolve(cartItems)
})
},
getCartCount:(userId)=>{
return new Promise(async(resolve,reject)=>{
let count=0
let cart=await db.get().collection(collection.CART_COLLECTION).findOne({user:objectId(userId)})
if(cart){
count=cart.products.length
}
resolve(count)
})
},
changeproductQuandity:(details)=>{
details.count=parseInt(details.count);
details.quantity=parseInt(details.quantity)
return new Promise((resolve,reject)=>{
if(details.count==-1 && details.quantity==1){
db.get().collection(collection.CART_COLLECTION)
.updateOne({_id:objectId(details.cart)},
{
$pull:{products:{item:objectId(details.product)}}
}
).then(response)
}else{
db.get().collection(collection.CART_COLLECTION)
.updateOne({_id:objectId(details.cart),'products.item':objectId(details.product)},
{
$inc:{'products.$.quantity':details.count}
}
).then((response)=>{
resolve({status:true})
})
}
})
},
getTotalAmount:(userId)=>{
return new Promise(async(resolve,reject)=>{
let total=await db.get().collection(collection.CART_COLLECTION).aggregate([
{
$match:{user:objectId(userId)}
},
{
$unwind:'$products'
},{
$project:{
item:'$products.item',
quantity:'$products.quantity',
}
},
{
$lookup:{
from:collection.PRODUCT_COLLECTION,
localField:'item',
foreignField:'_id',
as:'product'
}
},
{
$project:{
item:1,quantity:1,product:{$arrayElemAt:['$product',0]}
}
},
{
$group:{
_id:null,
total:{$sum:{$multiply:[{ $toInt: '$quantity'},{ $toInt: '$product.Price' }]}}
}
}
]).toArray()
resolve(total[0].total)
Two types of errors are getting here when the Quantity goes below one the product is removed from the cart, and, also,
resolve(total[0].total) ^ TypeError: Cannot read properties of undefined (reading 'total') [nodemon] app crashed - waiting for file changes before starting...
because of this, do I need to disable the decrement button when the quantity is 1? I assuming using this idea the error never gets. please help me.
Via Active questions tagged javascript - Stack Overflow https://ift.tt/DOpI8P3
Comments
Post a Comment