Onesible

03-StockFlow-Resources

Apr 9th, 2025
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const url = `http://localhost:3030/jsonstore/orders/`;
  2.  
  3. const ordersList = document.getElementById('list');
  4. const orderBtn = document.getElementById('order-btn');
  5. const editBtn = document.getElementById('edit-order');
  6.  
  7. const stockName = document.getElementById('name');
  8. const stockQuantity = document.getElementById('quantity');
  9. const orderDate = document.getElementById('date');
  10.  
  11. function attachEvents() {
  12.     document.getElementById('load-orders').addEventListener('click', loadOrders);
  13.     orderBtn.addEventListener('click', onOrder);
  14.     editBtn.addEventListener('click', onEdit);
  15. }
  16.  
  17. async function onLoad() {
  18.     let res = await fetch(url);
  19.     let data = await res.json();
  20.  
  21.     return Object.values(data);
  22. }
  23.  
  24. async function loadOrders() {
  25.     let orders = await onLoad();
  26.     ordersList.replaceChildren();
  27.  
  28.     orders.forEach(order => {
  29.         let changeBtn = create('button', ['Change'], 'change-btn');
  30.         let doneBtn = create('button', ['Done'], 'done-btn');
  31.  
  32.         changeBtn.addEventListener('click', () => onChange(order._id, order.name, order.quantity, order.date));
  33.         doneBtn.addEventListener('click', () => onDone(order._id));
  34.  
  35.         ordersList.appendChild(
  36.             create('li', [
  37.                 create('div', [
  38.                     create('h2', [order.name]),
  39.                     create('h3', [order.date]),
  40.                     create('h3', [order.quantity]),
  41.                     changeBtn,
  42.                     doneBtn
  43.                 ], 'container')
  44.             ], 'appointment')
  45.         );
  46.     })
  47. }
  48.  
  49. async function onOrder(e) {
  50.     e.preventDefault();
  51.  
  52.     let options = {
  53.         method: 'POST',
  54.         headers: { 'Content-Type': 'application/json' },
  55.         body: JSON.stringify({
  56.             name: stockName.value,
  57.             quantity: stockQuantity.value,
  58.             date: orderDate.value
  59.         })
  60.     }
  61.  
  62.     e.target.parentElement.reset();
  63.  
  64.     await fetch(url, options);
  65.     loadOrders();
  66. }
  67.  
  68. function onChange(id, name, quantity, date) {
  69.     stockName.value = name;
  70.     stockQuantity.value = quantity;
  71.     orderDate.value = date;
  72.  
  73.     editBtn.dataset.id = id;
  74.     editBtn.disabled = false;
  75.     orderBtn.disabled = true;
  76. }
  77.  
  78. async function onEdit(e) {
  79.     e.preventDefault();
  80.  
  81.     let options = {
  82.         method: 'PUT',
  83.         headers: { 'Content-Type': 'application/json' },
  84.         body: JSON.stringify({
  85.             _id: e.target.dataset.id,
  86.             name: stockName.value,
  87.             quantity: stockQuantity.value,
  88.             date: orderDate.value
  89.         })
  90.     }
  91.  
  92.     editBtn.disabled = true;
  93.     orderBtn.disabled = false;
  94.  
  95.     e.target.parentElement.reset();
  96.  
  97.     await fetch(url + e.target.dataset.id, options);
  98.     loadOrders();
  99. }
  100.  
  101. async function onDone(id) {
  102.     await fetch(url + id, { method: 'DELETE' })
  103.     loadOrders();
  104. }
  105.  
  106. function create(tag, children, className) {
  107.     let el = document.createElement(tag);
  108.     if (className) {
  109.         el.className = className;
  110.     }
  111.     children.forEach(child => {
  112.         if (typeof child === 'object') {
  113.             el.appendChild(child);
  114.         } else {
  115.             el.appendChild(document.createTextNode(child));
  116.         }
  117.     });
  118.  
  119.     return el;
  120. }
  121.  
  122. attachEvents();
Advertisement
Add Comment
Please, Sign In to add comment