I know that arrayUnion doesnt accept duplicates, but is there anyway I could prevent that and update just one field (quantity) if the item is duplicate? Maybe you have another idea of how to structure my data in order to achieve this if a solution for this doesnt exist. Thank you
and here is the function where I try to do that (ofc this doesnt work because async):
const addProductToCart=async()=>{
const q = query(collection(db, "carts"), where("userUID", "==", user?.uid));
const docRef = await getDocs(q);
if(docRef.docs[0].exists){
console.log('not empty');
let products=docRef.docs[0].data().products;
products.forEach((product)=>{
//product exists
if(product.productUniqueName == uniqueProductName){
//console.log(product)
let cloneProduct=product;
let updateProduct=product;
updateProduct.quantity=product.quantity+1;
console.log('Updated product'+updateProduct);
const currentUserCart=doc(db, 'carts', docRef.docs[0].id);
updateDoc(currentUserCart, {
cartItems: cartItems + 1,
products: arrayRemove(cloneProduct),
products: arrayUnion(updateProduct)
});
return;
}
})
//productUniqueName
let newProduct={};
newProduct.productName=product.name;
newProduct.productBrand=product.brand;
newProduct.price=product.price;
newProduct.size=product.quantity;
newProduct.quantity=1;
newProduct.productUniqueName=uniqueProductName;
newProduct.img=productImages[0];
const currentUserCart=doc(db, 'carts', docRef.docs[0].id);
await updateDoc(currentUserCart, {
cartItems: cartItems + 1,
products: arrayUnion(newProduct)
});
}
else{
console.log('empty');
}
}
