Advertisement
Kamend1

03.StockFlow

Apr 9th, 2025
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function orderTracker () {
  2.     let baseUrl = `http://localhost:3030/jsonstore/orders/`;
  3.     let orderList = document.getElementById('list');
  4.  
  5.     let orderNameField = document.getElementById('name');
  6.     let orderQuantityField = document.getElementById('quantity');
  7.     let orderDateField = document.getElementById('date');
  8.  
  9.     let loadBtn = document.getElementById('load-orders');
  10.     loadBtn.addEventListener('click', getOrders);
  11.  
  12.     let orderBtn = document.getElementById('order-btn');
  13.     orderBtn.addEventListener('click', function(e) {
  14.         e.preventDefault();
  15.         createOrder();
  16.     })
  17.  
  18.     let editBtn = document.getElementById('edit-order');
  19.     editBtn.addEventListener('click', function(e) {
  20.         e.preventDefault();
  21.         updateOrder();
  22.     })
  23.  
  24.     function onChange (event) {
  25.         let currentOrderElement = event.target.parentElement
  26.         let currentOrderID = event.target.dataset.id
  27.  
  28.         let currentOrderName = currentOrderElement.querySelector('h2').textContent;
  29.         let currentOrderQty = currentOrderElement.querySelector('h3:last-of-type').textContent;
  30.         let currentOrderDate = currentOrderElement.querySelector('h3:first-of-type').textContent;
  31.  
  32.         orderNameField.value = currentOrderName;
  33.         orderQuantityField.value = currentOrderQty;
  34.         orderDateField.value = currentOrderDate;
  35.  
  36.         orderBtn.disabled = true;
  37.         editBtn.dataset.id = currentOrderID;
  38.         editBtn.disabled = false;
  39.  
  40.         currentOrderElement.remove()
  41.     }
  42.  
  43.     async function getOrders() {
  44.  
  45.         let response = await fetch(baseUrl);
  46.         let data = await response.json();
  47.  
  48.         let orders = Object.values(data);
  49.  
  50.         for (let order of orders) {
  51.             let stockName = order.name;
  52.             let quantity = order.quantity;
  53.             let date = order.date;
  54.  
  55.             let nameElement = createElement('h2', stockName);
  56.             let dateElement = createElement('h3', date);
  57.             let quantityElement = createElement('h3', quantity);
  58.            
  59.             let changeBtn = createElement('button', 'Change', { class: 'change-btn'});
  60.             changeBtn.dataset.id = order._id;
  61.             changeBtn.addEventListener('click', onChange);
  62.              
  63.             let doneBtn = createElement('button', 'Done', { class: 'done-btn'});
  64.             doneBtn.dataset.id = order._id;
  65.             doneBtn.addEventListener('click', function () {
  66.                 deleteOrder(doneBtn.dataset.id);
  67.             });
  68.            
  69.             let containerDiv = createElement('div', null, { class: 'container'}, nameElement, dateElement, quantityElement, changeBtn, doneBtn);
  70.             orderList.appendChild(containerDiv);
  71.         }
  72.     }
  73.  
  74.     async function createOrder() {
  75.         let newOrderName = orderNameField.value;
  76.         let newOrderQty = orderQuantityField.value;
  77.         let newOrderDate = orderDateField.value;
  78.  
  79.         let newOrder = {
  80.             name: newOrderName,
  81.             date: newOrderDate,
  82.             quantity: newOrderQty,
  83.         }
  84.  
  85.         let options = {
  86.             method: 'post',
  87.             headers: { 'Content-type': 'application/json' },
  88.             body: JSON.stringify(newOrder),
  89.         }
  90.  
  91.         orderList.replaceChildren();
  92.         await fetch (baseUrl, options);
  93.  
  94.         orderNameField.value = '';
  95.         orderQuantityField.value = '';
  96.         orderDateField.value = '';
  97.  
  98.         getOrders();
  99.     }
  100.  
  101.     async function updateOrder() {
  102.         orderList.replaceChildren();
  103.        
  104.         let updateId = editBtn.dataset.id
  105.  
  106.         let updatedOrder = {
  107.             name: orderNameField.value,
  108.             date: orderDateField.value,
  109.             quantity: orderQuantityField.value,
  110.             _id: updateId,
  111.         }
  112.  
  113.         let options = {
  114.             method: 'put',
  115.             headers: { 'Content-type': 'application/json' },
  116.             body: JSON.stringify(updatedOrder),
  117.         }
  118.  
  119.         await fetch (baseUrl + updateId, options);
  120.  
  121.         editBtn.dataset.id = '';
  122.         editBtn.disabled = true;
  123.         orderBtn.disabled = false;
  124.  
  125.         orderNameField.value = '';
  126.         orderDateField.value = '';
  127.         orderQuantityField.value = '';
  128.  
  129.         getOrders();
  130.     }
  131.  
  132.     async function deleteOrder(id) {
  133.         options = {
  134.             method: 'delete',
  135.         }
  136.        
  137.         orderList.replaceChildren();
  138.         await fetch (baseUrl + id, options);
  139.  
  140.         getOrders();
  141.     }
  142. }
  143.  
  144. function createElement(type, content, attributes = {}, ...children) {
  145.     let element = document.createElement(type);
  146.  
  147.     if (content) {
  148.         element.textContent = content;
  149.     }
  150.  
  151.     for (let attr in attributes) {
  152.         if (attr === 'class') {
  153.             element.classList.add(...attributes[attr].split(' '));
  154.         } else {
  155.             element.setAttribute(attr, attributes[attr]);
  156.         }
  157.     }
  158.  
  159.     for (let child of children) {
  160.         if (typeof child === 'string') {
  161.             child = document.createTextNode(child);
  162.         }
  163.         element.appendChild(child);
  164.     }
  165.  
  166.     return element;
  167. }
  168.  
  169. orderTracker();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement