You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
4.0 KiB
JavaScript
135 lines
4.0 KiB
JavaScript
2 years ago
|
(function() {
|
||
|
let orders = null;
|
||
|
const appLoadingEle = document.getElementById("app-loading-display");
|
||
|
const orderWrapperEle = document.getElementById("order-display");
|
||
|
const orderEmptyTextEle = document.getElementById("order-empty-text");
|
||
|
const orderTableEle = document.getElementById("order-table");
|
||
|
const orderTableBodyEle = document.querySelector("#order-table tbody");
|
||
|
const addOrderEle = document.getElementById("add-order-wrapper");
|
||
|
const addOrderForm = document.getElementById("add-order-form");
|
||
|
|
||
|
const orderIdField = document.getElementById("order-id");
|
||
|
const productIdField = document.getElementById("product-id");
|
||
|
const quantityField = document.getElementById("quantity");
|
||
|
const amountField = document.getElementById("amount");
|
||
|
const taxField = document.getElementById("tax");
|
||
|
const shippingField = document.getElementById("shippingAmount");
|
||
|
const shippingAddressField = document.getElementById("shippingAddress");
|
||
|
|
||
|
function fetchOrders() {
|
||
|
fetch("http://localhost:8080/orders")
|
||
|
.then(r => r.json())
|
||
|
.then(r => orders = r)
|
||
|
.then(renderOrders)
|
||
|
.catch((e) => {
|
||
|
init();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function init() {
|
||
|
fetch("http://localhost:8080/init")
|
||
|
.then(() => fetchOrders())
|
||
|
.catch((e) => displayError(e));
|
||
|
}
|
||
|
|
||
|
function renderOrders() {
|
||
|
appLoadingEle.classList.add("d-none");
|
||
|
orderWrapperEle.classList.remove("d-none");
|
||
|
addOrderEle.classList.remove("d-none");
|
||
|
|
||
|
if (orders.length === 0) {
|
||
|
orderEmptyTextEle.classList.remove("d-none");
|
||
|
orderTableEle.classList.add("d-none");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
orderEmptyTextEle.classList.add("d-none");
|
||
|
orderTableEle.classList.remove("d-none");
|
||
|
|
||
|
while (orderTableBodyEle.firstChild) {
|
||
|
orderTableBodyEle.removeChild(orderTableBodyEle.firstChild);
|
||
|
}
|
||
|
|
||
|
orders.forEach((order) => {
|
||
|
const orderId = order.order_id;
|
||
|
|
||
|
const row = document.createElement("tr");
|
||
|
|
||
|
row.appendChild(createCell(order.order_id));
|
||
|
row.appendChild(createCell(order.product_id));
|
||
|
row.appendChild(createCell(order.quantity));
|
||
|
row.appendChild(createCell(order.amount));
|
||
|
row.appendChild(createCell(order.shipping));
|
||
|
row.appendChild(createCell(order.tax));
|
||
|
row.appendChild(createCell(order.shipping_address));
|
||
|
|
||
|
const actionCell = document.createElement("td");
|
||
|
|
||
|
const deleteButton = document.createElement("button");
|
||
|
deleteButton.classList.add(...["btn","btn-sm","btn-danger"]);
|
||
|
deleteButton.innerText = "Delete";
|
||
|
|
||
|
deleteButton.addEventListener("click", (e) => {
|
||
|
e.preventDefault();
|
||
|
deleteOrder(orderId);
|
||
|
});
|
||
|
|
||
|
actionCell.appendChild(deleteButton);
|
||
|
|
||
|
row.appendChild(actionCell);
|
||
|
|
||
|
orderTableBodyEle.appendChild(row);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function createCell(contents) {
|
||
|
const cell = document.createElement("td");
|
||
|
cell.innerText = contents;
|
||
|
return cell;
|
||
|
}
|
||
|
|
||
|
function deleteOrder(orderId) {
|
||
|
fetch(`http://localhost:8080/delete_order?id=${orderId}`)
|
||
|
.then(() => fetchOrders());
|
||
|
}
|
||
|
|
||
|
function displayError(err) {
|
||
|
alert("Error:" + err);
|
||
|
}
|
||
|
|
||
|
function onAddFormSubmit(e) {
|
||
|
e.preventDefault();
|
||
|
|
||
|
const data = {
|
||
|
order_id : parseFloat(orderIdField.value),
|
||
|
product_id : parseFloat(productIdField.value),
|
||
|
quantity : parseFloat(quantityField.value),
|
||
|
amount : parseFloat(amountField.value),
|
||
|
shipping : parseFloat(shippingField.value),
|
||
|
tax : parseFloat(taxField.value),
|
||
|
shipping_address : shippingAddressField.value,
|
||
|
};
|
||
|
|
||
|
fetch("http://localhost:8080/create_order", {
|
||
|
method: "POST",
|
||
|
body: JSON.stringify(data),
|
||
|
headers: { "Content-type": "application/json" },
|
||
|
}).then(() => fetchOrders())
|
||
|
.then(() => resetAddOrderForm());
|
||
|
|
||
|
alert("Order added");
|
||
|
}
|
||
|
|
||
|
function resetAddOrderForm() {
|
||
|
orderIdField.value = "";
|
||
|
productIdField.value = "";
|
||
|
quantityField.value = "";
|
||
|
amountField.value = "";
|
||
|
shippingField.value = "";
|
||
|
taxField.value = "";
|
||
|
shippingAddressField.value = "";
|
||
|
}
|
||
|
|
||
|
fetchOrders();
|
||
|
addOrderForm.addEventListener("submit", onAddFormSubmit);
|
||
|
})();
|