Advertisement
Maxim_01

Untitled

Apr 1st, 2023
526
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const BASE_URL = "http://localhost:3030/jsonstore/grocery/"
  2.  
  3. let tableBody = document.getElementById("tbody")
  4.  
  5. let products = {}
  6. let idForEdit = null
  7.  
  8. let inputName = document.getElementById("product")
  9. let inputCount = document.getElementById("count")
  10. let inputPrice = document.getElementById("price")
  11.  
  12.  
  13. let loadBtn = document.getElementById("load-product")
  14. let addBtn = document.getElementById("add-product")
  15. let bigUpdateBtn = document.getElementById("update-product")
  16.  
  17. loadBtn.addEventListener("click", loadHandler)
  18. addBtn.addEventListener("click", addHandler)
  19. bigUpdateBtn.addEventListener("click", updateProductHAndler)
  20.  
  21.  
  22. function loadHandler(event){
  23.  
  24.     if (event){
  25.         event.preventDefault()
  26.     }
  27.  
  28.     tableBody.innerHTML = ""
  29.  
  30.  
  31.     fetch(BASE_URL, {method: "GET"})
  32.     .then((res) => res.json())
  33.     .then((data) => {
  34.         for (const id in data) {
  35.  
  36.             let tr = createElement("tr", "", tableBody)
  37.            
  38.             let productInfo = data[id]
  39.             let name = productInfo.product
  40.             let count = productInfo.count
  41.             let price = productInfo.price
  42.  
  43.             tr.id = id
  44.  
  45.  
  46.             products[name] = {count, price, id}
  47.  
  48.             createElement("td", name, tr, "", ["name"])
  49.             createElement("td", count, tr, "", ["count-product"])
  50.             createElement("td", price, tr, "", ["product-price"])
  51.  
  52.             let buttonsTd = createElement("td", "", tr, "", ["btn"])
  53.  
  54.             let updateBtn = createElement("button", "Update", buttonsTd, "", ["update"])
  55.             let deleteBtn = createElement("button", "Delete", buttonsTd, "", ["delete"])
  56.  
  57.             deleteBtn.addEventListener("click", deleteHandler)
  58.             updateBtn.addEventListener("click", loadUpdateFormHandler)
  59.         }
  60.     })
  61.     .catch((err) => console.error(err))
  62. }
  63.  
  64. function addHandler(event){
  65.     if (event){
  66.         event.preventDefault()
  67.     }
  68.     let productNameValue = inputName.value
  69.     let productCountValue = inputCount.value
  70.     let productPriceValue =  inputPrice.value
  71.  
  72.     let httpHeaders = {
  73.         method: "POST",
  74.         body: JSON.stringify({
  75.             product: productNameValue,
  76.             count: productCountValue,
  77.             price: productPriceValue
  78.         })
  79.     }
  80.     fetch(BASE_URL, httpHeaders)
  81.     .then(() => {
  82.         loadHandler()
  83.         inputName.value = ""
  84.         inputCount.value = ""
  85.         inputPrice.value = ""
  86.     })
  87.     .catch((err) => console.error(err))
  88. }
  89.  
  90. function deleteHandler(event){
  91.  
  92.     let tr = event.currentTarget.parentElement.parentElement
  93.     let id = tr.id
  94.  
  95.     let httpHeaders = {
  96.         method: "DELETE"
  97.     }
  98.  
  99.     fetch(`${BASE_URL}${id}`, httpHeaders)
  100.     .then(() => loadHandler())
  101.     .catch((err) => console.error(err))
  102.  
  103. }
  104.  
  105. function loadUpdateFormHandler(event){
  106.     addBtn.disabled = true
  107.     bigUpdateBtn.disabled = false
  108.  
  109.     let tr = event.currentTarget.parentElement.parentElement
  110.     let trChildren = Array.from(tr.children)
  111.  
  112.     idForEdit = tr.id
  113.  
  114.     let productName = trChildren[0].textContent
  115.     let productInfo = products[productName]
  116.  
  117.     inputName.value = productName
  118.     inputCount.value = productInfo.count
  119.     inputPrice.value = productInfo.price
  120.  
  121. }
  122.  
  123. function updateProductHAndler(event){
  124.  
  125.     event.preventDefault()
  126.  
  127.     httpHeaders = {
  128.         method: "PATCH",
  129.         body: JSON.stringify({
  130.             product: inputName.value,
  131.             count: inputCount.value,
  132.             price: inputPrice.value
  133.         })
  134.     }
  135.     fetch(`${BASE_URL}/${idForEdit}`, httpHeaders)
  136.     .then(() => {
  137.         loadHandler()
  138.         inputName.value = ""
  139.         inputCount.value = ""
  140.         inputPrice.value = ""
  141.  
  142.         addBtn.disabled = false
  143.         bigUpdateBtn.disabled = true
  144.     })
  145.     .catch((err) => console.error(err))
  146. }
  147.  
  148.  
  149. function createElement(type, content, parent, id, classes, attributes){
  150.     let element = document.createElement(type)
  151.     if (content && type !== "input"){
  152.       element.textContent = content
  153.     }
  154.     if (content && type === "input"){
  155.       element.value = content
  156.     }
  157.     if (parent){
  158.       parent.appendChild(element)
  159.     }
  160.     if (id){
  161.       element.id = id
  162.     }
  163.     if (classes){
  164.       element.classList.add(...classes)
  165.     }
  166.     if (attributes){
  167.       for (const key in attributes) {
  168.         element.setAttribute(key, attributes[key])
  169.       }
  170.     }
  171.     return element
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement