JSFiddle - React, Tailwind, and code Playground
by cmruser
JavaScript
class Order {
constructor(inventory) {
this.inventory = inventory;
this.itemsByCategory = { "Burgers": [], "Sides": [], "Drinks": [] };
this.combos = [];
}
async addItem(item_id) {
const [stockLevel, item] = await Promise.all([
this.inventory.getStock(item_id),
this.inventory.getItem(item_id)
]);
if (stockLevel == 0) {
return [false, itemId];
}
const success = await this.inventory.decrementStock(itemId);
if (!success) {
return [false, itemId];
}
this.itemsByCategory[item.category].push(item);
return [true, itemId];
}
findCombos() {
let numberOfCombos = null;
for (const categoryItems of Object.values(this.itemsByCategory)) {
if (numberOfCombos == null) {
numberOfCombos = categoryItems.length;
} else {
numberOfCombos = Math.min(numberOfCombos, categoryItems.length);
}
}
this.itemsByCategory["Burgers"].sort((a, b) => a.price - b.price);
this.itemsByCategory["Sides"].sort((a, b) => a.price - b.price);
this.itemsByCategory["Drinks"].sort((a, b) => a.price - b.price);
for (let i = 0; i < numberOfCombos; i++) {
const burger = this.itemsByCategory["Burgers"].pop();
const side = this.itemsByCategory["Sides"].pop();
const drink = this.itemsByCategory["Drinks"].pop();
const combo = new Combo(burger, side, drink);
this.combos.push(combo);
}
}
getPrice() {
this.findCombos();
let subTotal = 0;
for (const category of Object.values(this.itemsByCategory)) {
for (const item of category) {
subTotal += item.price;
}
}
for (const combo of this.combos) {
subTotal += combo.price;
}
return subTotal;
}
toString() {
let string = "";
for (let i = 0; i < this.combos.length; i++) {
string += this.combos[i].toString();
if (i != this.combos.length - 1) {
string += "\n";
}
}
if (this.combos.length > 0)...