heissepreise/site/carts.js

82 lines
2.9 KiB
JavaScript
Raw Normal View History

2023-06-16 19:24:43 +02:00
const { downloadJSON, today } = require("./js/misc");
2023-06-09 01:31:30 +02:00
const model = require("./model");
require("./views");
2023-09-17 19:48:29 +02:00
const { __ } = require("./browser_i18n");
2023-06-09 01:31:30 +02:00
const { STORE_KEYS } = require("./model/stores");
const { ProgressBar } = require("./views/progress-bar");
const progressBar = new ProgressBar(STORE_KEYS.length);
2023-06-09 01:31:30 +02:00
function newCart() {
2023-09-17 19:21:42 +02:00
let name = prompt(__("Carts_Name für Warenkorb eingeben:"));
2023-06-09 01:31:30 +02:00
if (!name || name.trim().length == 0) return;
name = name.trim();
if (model.carts.carts.some((cart) => cart.name === name)) {
2023-09-17 19:21:42 +02:00
alert(__("Carts_Warenkorb mit Namen '{{name}}' existiert bereits", { name: name }));
2023-06-09 01:31:30 +02:00
return;
2023-05-19 16:01:43 +02:00
}
2023-06-09 01:31:30 +02:00
model.carts.add(name);
location.href = `cart.html?name=${encodeURIComponent(name)}`;
2023-06-09 01:31:30 +02:00
}
2023-06-16 19:24:43 +02:00
function isIterable(obj) {
return typeof obj[Symbol.iterator] === "function";
}
function importCart(importedCart) {
const items = [];
for (const cartItem of importedCart.items) {
const item = model.items.lookup[cartItem.store + cartItem.id];
if (!item) continue;
items.push(item);
}
importedCart.items = items;
2023-05-27 20:56:26 +02:00
2023-06-16 19:24:43 +02:00
const index = model.carts.carts.findIndex((cart) => cart.name === importedCart.name);
if (index != -1) {
let newName = importedCart.name;
while (true) {
newName = prompt(
2023-09-17 19:21:42 +02:00
__("Carts_Warenkorb '{{name}}' existiert bereits. Bitte einen anderen Namen für den zu importierenden Warenkorb eingeben", {
name: importedCart.name,
}),
2023-06-16 19:24:43 +02:00
importedCart.name + today()
);
if (!newName || newName.trim().length == 0) return;
newName = newName.trim();
if (newName != importedCart.name) {
importedCart.name = newName;
model.carts.carts.push(importedCart);
break;
}
}
2023-06-16 19:24:43 +02:00
} else {
model.carts.carts.push(importedCart);
2023-06-09 01:31:30 +02:00
}
model.carts.save();
}
2023-05-27 20:56:26 +02:00
2023-06-16 19:24:43 +02:00
function importCarts(importedCarts) {
if (isIterable(importedCarts)) {
importedCarts.forEach((cart) => importCart(cart));
} else {
importCart(importedCarts);
}
}
2023-06-09 01:31:30 +02:00
(async () => {
await model.load(() => progressBar.addStep());
2023-06-09 01:31:30 +02:00
document.querySelector("#carts").model = model.carts;
document.querySelector("#new").addEventListener("click", () => newCart());
document.querySelector("#export").addEventListener("click", () => downloadJSON("carts.json", model.carts.carts));
document.querySelector("#import").addEventListener("click", () => document.querySelector("#fileInput").click());
document.querySelector("#fileInput").addEventListener("change", function (event) {
2023-05-27 20:56:26 +02:00
const reader = new FileReader();
2023-06-09 01:31:30 +02:00
reader.onload = (event) => {
const importedCarts = JSON.parse(event.target.result);
importCarts(importedCarts);
2023-05-27 20:56:26 +02:00
};
2023-06-09 01:31:30 +02:00
reader.readAsText(event.target.files[0]);
2023-05-19 16:01:43 +02:00
});
2023-06-09 01:31:30 +02:00
})();