basic-business-template/assets/js/modules/cart.js

97 lines
2.7 KiB
JavaScript

import { url } from '../utils.js';
let isSync = false;
let items = null;
export async function sync() {
if (!isSync) {
if (items !== null) {
let miniItems = items.map(obj => { return { id: obj.id, quantity: obj.quantity } });
localStorage.setItem("cart", JSON.stringify(miniItems));
}
if (localStorage.getItem("cart") != null) {
let cartItems = localStorage.getItem("cart");
items = JSON.parse(cartItems);
}
let ids = items.map(obj => obj.id);
if (ids.length > 0) {
let products = await fetch(url("contents/" + ids.join(",")));
products = await products.json();
products.contents.forEach(product => {
product.quantity = items.find(obj => obj.id == product.id).quantity;
product.calc_preis = product.preis;
if (product.quantity >= 5 && product.preis_5) product.calc_preis = product.preis_5;
if (product.quantity >= 10 && product.preis_10) product.calc_preis = product.preis_10;
});
items = products.contents;
}
isSync = true;
}
}
export function addItem(id) {
let objProductInfo = items.find(obj => obj.id == id);
let index = items.indexOf(objProductInfo);
if (index == -1) items.push({ id: id, quantity: 1 });
isSync = false;
sync();
}
export async function updateItem(id, data) {
let product = await getItem(id);
if (data.quantity) product.quantity = data.quantity;
isSync = false;
await sync();
}
export async function removeItem(id) {
items = items.filter(item => item.id !== Number(id));
console.log(items);
isSync = false;
await sync();
}
export async function getItem(id) {
await sync();
return items.find(obj => obj.id == id);
}
export async function getItems() {
await sync();
return items;
}
export async function getQuantity() {
await sync();
let quantitys = items.map(obj => obj.quantity);
let quantityOfProducts = 0;
for (let i = 0; i < quantitys.length; i++) { if (Number.isInteger(Number(quantitys[i]))) quantityOfProducts += Number(quantitys[i]); }
return quantityOfProducts;
}
export async function getTotalPrice() {
await sync();
let totalPrice = 0;
items.forEach(product => {
product.calc_preis = product.preis;
if (product.quantity >= 5 && product.preis_5) product.calc_preis = product.preis_5;
if (product.quantity >= 10 && product.preis_10) product.calc_preis = product.preis_10;
totalPrice += product.calc_preis * product.quantity;
});
return totalPrice;
}
export async function getLink() {
await sync();
return url(btoa(JSON.stringify(items)));
}