97 lines
2.8 KiB
JavaScript
97 lines
2.8 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(document.querySelector('meta[name="get-contents"]').getAttribute('content') + "/" + 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)));
|
||
|
}
|