const { downloadJSON, dom, getDynamicElements } = require("../misc");
const { View } = require("./view");
class CartsList extends View {
constructor() {
super();
this.innerHTML = /*html*/ `
Name |
Produkte |
Preis |
Aktionen |
`;
this._tableBody = this.querySelector("tbody");
this._cartsListItemTemplate = dom(
"tr",
/*html*/ `
|
Produkte:
|
Preisänderungen:
|
|
`
);
this._cartsListItemTemplate.classList.add(
"grid",
"grid-cols-3",
"hover:bg-gray-100",
"border",
"border-gray-200",
"rounded-md",
"p-2",
"md:table-row"
);
}
render() {
const model = this._model;
this._tableBody.innerHTML = "";
for (const cart of model.carts) {
let oldPrice = 0;
let currPrice = 0;
let shareLink = "cart.html?cart=" + encodeURIComponent(cart.name) + ";";
for (const item of cart.items) {
oldPrice += item.priceHistory[item.priceHistory.length - 1].price;
currPrice += item.priceHistory[0].price;
shareLink += item.store + item.id + ";";
}
const increase = oldPrice != 0 ? Math.round(((currPrice - oldPrice) / oldPrice) * 100) : 0;
const cartUrl = `cart.html?name=${encodeURIComponent(cart.name)}`;
const cartListItem = this._cartsListItemTemplate.cloneNode(true);
const elements = getDynamicElements(cartListItem);
elements.name.href = cartUrl;
elements.name.innerText = cart.name;
elements.numProducts.innerText = cart.items.length;
elements.price.innerText = `${currPrice.toFixed(2)} ${(increase > 0 ? "+" : "") + increase + "%"}`;
elements.price.style.color = currPrice > oldPrice ? "red" : "green";
elements.share.href = shareLink;
elements.json.addEventListener("click", () => {
event.preventDefault();
downloadJSON(cart.name + ".json", cart);
});
if (cart.name === "Momentum Eigenmarken Vergleich") {
elements.delete.classList.add("hidden");
} else {
elements.delete.addEventListener("click", () => model.remove(cart.name));
}
this._tableBody.append(cartListItem);
}
}
}
customElements.define("carts-list", CartsList);