localStorage.clear(); // tek sayfa kullanılıyorsa temizler
//! variables
const cartBtn = document.querySelector(".cart-btn");
const clearCartBtn = document.querySelector(".btn-clear");
const checkoutCartBtn = document.querySelector(".btn-checkout");
const cartItems = document.querySelector(".cart-items");
const cartTotal = document.querySelector(".total-value");
const cartContent = document.querySelector(".cart-list");
const productsDOM = document.querySelector("#products-dom");
var kurlar = "TL"; //databaseden
let cart = [];
let buttonsDOM = [];
class Products {
async getProducts() {
try {
// let result = await fetch("https://67a784d6203008941f67d30d.mockapi.io/products");
// let data = await result.json();
let data = [{"id":"1","title":"Tokat Yaprağı - 1 kg","image":"Tokat Yaprağı - 1 kg","price":350},{"id":"2","title":"Tokat Yaprağı - 3,5 kg","image":"Tokat Yaprağı - 3,5 kg","price":650},{"id":"3","title":"Tokat Yaprağı - 5 kg","image":"Tokat Yaprağı - 5 kg","price":1250},{"id":"4","title":"Kuşburnu Pekmezi - 1 kg","image":"Kuşburnu Pekmezi - 1 kg","price":250},{"id":"5","title":"Üzüm Pekmezi - 1 kg","image":"Üzüm Pekmezi - 1 kg","price":250},{"id":"6","title":"Karadut Pekmezi - 1 kg","image":"Karadut Pekmezi - 1 kg","price":250},{"id":"7","title":"Karakovan Bal - 1 kg","image":"Karakovan Bal - 1 kg","price":950},{"id":"8","title":"Süzme Bal - 1 kg","image":"Süzme Bal - 1 kg","price":450},{"id":"9","title":"Sarı Kantaron Yağı - 200 gr","image":"Sarı Kantaron Yağı - 200 gr","price":250},{"id":"10","title":"Kozalak Şurubu - 1 lt","image":"Kozalak Şurubu - 1 lt","price":500},{"id":"11","title":"Kuyruk Yağlı Krem","image":"Kuyruk Yağlı Krem","price":450},{"id":"12","title":"İpek Krem","image":"İpek Krem","price":350},{"id":"13","title":"Botoks Krem","image":"Botoks Krem","price":350},{"id":"14","title":"Yara\/Yanık Kremi","image":"Yara\/Yanık Kremi","price":350},{"id":"15","title":"El\/Ayak Bakım Kremi","image":"El\/Ayak Bakım Kremi","price":350},{"id":"16","title":"Katı Parfüm","image":"Katı Parfüm","price":300},{"id":"17","title":"Lip Gloss","image":"Lip Gloss","price":300},{"id":"18","title":"Şampuan - 500 ml","image":"Şampuan - 500 ml","price":450},{"id":"19","title":"Yüz Temizleme Losyonu","image":"Yüz Temizleme Losyonu","price":400},{"id":"20","title":"Limon\/Sarımsak Kürü - 1 lt","image":"Limon\/Sarımsak Kürü - 1 lt","price":500}]; //databaseden
let products = data;
return products;
} catch (error) {
console.log(error);
}
}
}
class UI {
displayProducts(products) {
let result = "";
products.forEach(item => {
// item.price = parseFloat(item.price.toFixed(2));
item.price = item.price.toFixed(2);
result += `
${item.id} |
${item.title} |
${item.price} ${kurlar} |
${item.title}
${item.price} ${kurlar}
`});
productsDOM.innerHTML = result;
}
getBagButtons() {
const buttons = [...document.querySelectorAll(".btn-add-to-cart")];
buttonsDOM = buttons;
buttons.forEach(button => {
let id = button.dataset.id;
let inCart = cart.find(item => item.id === id);
if (inCart) {
button.setAttribute("disabled", "disabled");
button.style.opacity = ".3";
} else {
button.addEventListener("click", event => {
event.target.disabled = true;
event.target.style.opacity = ".3";
//* get product from products
let cartItem = { ...Storage.getProduct(id), amount: 1 };
//* add procuct to the cart
cart = [...cart, cartItem];
//* save cart in local storage
Storage.saveCart(cart);
//* save cart values
this.saveCartValues(cart);
//* display cart item
this.addCartItem(cartItem)
//* show the cart
this.showCart();
})
}
})
}
saveCartValues(cart) {
let tempTotal = 0;
let itemsTotal = 0;
cart.map(item => {
tempTotal += item.price * item.amount;
itemsTotal += item.amount;
});
cartTotal.innerText = tempTotal.toFixed(2) + " " + kurlar;
cartItems.innerText = itemsTotal;
}
addCartItem(item) {
const li = document.createElement("li");
li.classList.add("cart-list-item");
li.innerHTML = `
`;
cartContent.appendChild(li);
}
showCart() {
cartBtn.click();
}
setupAPP() {
cart = Storage.getCart();
this.saveCartValues(cart);
this.populateCart(cart);
}
populateCart(cart) {
cart.forEach(item => this.addCartItem(item));
}
cartLogic() {
clearCartBtn.addEventListener("click", () => {
this.clearCart();
})
checkoutCartBtn.addEventListener("click", () => {
this.checkoutCart();
})
cartContent.addEventListener("click", event => {
if (event.target.classList.contains("cart-remove-btn")) {
let removeItem = event.target;
let id = removeItem.dataset.id;
removeItem.parentElement.parentElement.parentElement.remove();
this.removeItem(id);
} else if (event.target.classList.contains("quantity-minus")) {
let lowerAmount = event.target;
let id = lowerAmount.dataset.id;
let tempItem = cart.find(item => item.id === id);
tempItem.amount = tempItem.amount - 1;
if (tempItem.amount > 0) {
Storage.saveCart(cart);
this.saveCartValues(cart);
lowerAmount.nextElementSibling.innerText = tempItem.amount;
} else {
lowerAmount.parentElement.parentElement.parentElement.remove();
this.removeItem(id);
}
} else if (event.target.classList.contains("quantity-plus")) {
let addAmount = event.target;
let id = addAmount.dataset.id;
let tempItem = cart.find(item => item.id === id);
tempItem.amount = tempItem.amount + 1;
Storage.saveCart(cart);
this.saveCartValues(cart);
addAmount.previousElementSibling.innerText = tempItem.amount;
}
})
}
clearCart() {
let cartItems = cart.map(item => item.id);
cartItems.forEach(id => this.removeItem(id));
while (cartContent.children.length > 0) {
cartContent.removeChild(cartContent.children[0])
}
}
checkoutCart() {
var yazilacak = "" ;
var ttprice = 0 ;
var tprice = 0 ;
const myJSON = JSON.parse(localStorage.getItem("cart"));
var myObj = myJSON;
for ( var baslangic = 0 ; baslangic < myObj.length ; baslangic ++ ) {
tprice = myObj[baslangic].amount * myObj[baslangic].price ;
tprice = parseFloat(tprice.toFixed(2));
ttprice = ttprice + tprice ;
ttprice = parseFloat(ttprice.toFixed(2));
yazilacak += "
" + myObj[baslangic].amount + " adet x " + myObj[baslangic].title + " ( " + myObj[baslangic].price + " ) = " + tprice +" "+ kurlar +"
";
}
yazilacak += "
Toplam tutar : " + ttprice +" "+ kurlar + " (Bilgi Amaçlıdır!)";
yazilacak += "
Bu sipariş için onay alabilir miyim ? ";
if ( baslangic > 0 ){
let wsparis = yazilacak.replace(/
/gi, "%0a");
var url = "https://wa.me/+905337063970?text="
+"Organik Ali Amca Alışveriş Sepeti"+"%0a"
+"-------------------------------------"+"%0a"
+wsparis+"%0a"+"%0a"
+"Sipariş Verenin Adı Soyadı : ";
let text = document.getElementById("demo").innerHTML = yazilacak + ` `;
}
else {
let text = document.getElementById("demo").innerHTML = "";
}
}
removeItem(id) {
cart = cart.filter(item => item.id !== id);
this.saveCartValues(cart);
Storage.saveCart(cart);
let button = this.getSinleButton(id);
button.disabled = false;
button.style.opacity = "1";
}
getSinleButton(id) {
return buttonsDOM.find(button => button.dataset.id === id);
}
}
class Storage {
static saveProducts(products) {
localStorage.setItem("products", JSON.stringify(products));
}
static getProduct(id) {
let products = JSON.parse(localStorage.getItem("products"));
return products.find(product => product.id === id);
}
static saveCart(cart) {
localStorage.setItem("cart", JSON.stringify(cart));
}
static getCart() {
return localStorage.getItem("cart") ? JSON.parse(localStorage.getItem("cart")) : [];
}
}
document.addEventListener("DOMContentLoaded", () => {
const ui = new UI();
const products = new Products();
ui.setupAPP();
products.getProducts().then(products => {
ui.displayProducts(products);
Storage.saveProducts(products);
}).then(() => {
ui.getBagButtons();
ui.cartLogic();
})
});
function removeElement() {
document.getElementById("demo").style.display = "none";
}
function changeVisibility() {
document.getElementById("demo").style.display = "block";
document.getElementById("demo").style.visibility = "visible";
}