Maxim_01

Untitled

Mar 30th, 2023
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function attachEvents() {
  2.  
  3.     const BASE_URL = "http://localhost:3030/jsonstore/tasks/"
  4.     const DELETE_BASE_URL = "http://localhost:3030/jsonstore/tasks/"
  5.  
  6.     let newTaskName = ""
  7.  
  8.     let loadBtn = document.getElementById("load-button")
  9.     let addBtn = document.getElementById("add-button")
  10.  
  11.     let titleName = document.getElementById("title")
  12.  
  13.     let toDoList = document.getElementById("todo-list")
  14.  
  15.     loadBtn.addEventListener("click", loadHandler)
  16.     addBtn.addEventListener("click", addHandler)
  17.  
  18.  
  19.     function loadHandler(){
  20.       toDoList.innerHTML = ""
  21.       if (event){
  22.         event.preventDefault()
  23.       }
  24.       fetch(BASE_URL, {method: "GET"})
  25.       .then((res) => res.json())
  26.       .then((data) => {
  27.  
  28.           for (const id in data) {
  29.               let taskName = data[id].name
  30.               let li = createElement("li", "", toDoList)
  31.               createElement("span", taskName, li)
  32.               let removeBtn = createElement("button", "Remove", li)
  33.               let editBtn = createElement("button", "Edit", li)
  34.  
  35.               li.id = id
  36.  
  37.               removeBtn.addEventListener("click", removeHandler)
  38.               editBtn.addEventListener("click", editHandler)
  39.             }
  40.         })
  41.     }
  42.  
  43.     function addHandler(){
  44.       if (event){
  45.         event.preventDefault()
  46.       }
  47.  
  48.       let httpHeaders = {
  49.         method: "POST",
  50.         body: JSON.stringify({name: `${titleName.value}`})
  51.       }
  52.       fetch(BASE_URL, httpHeaders)
  53.       .then(() => loadHandler())
  54.     }
  55.  
  56.     function removeHandler(event){
  57.       let li = event.currentTarget.parentElement
  58.       let id = li.id
  59.  
  60.       let httpHeaders = {
  61.         method: "DELETE"
  62.       }
  63.  
  64.       fetch(`${DELETE_BASE_URL}${id}`, httpHeaders)
  65.  
  66.       .then(() => {loadHandler()})
  67.  
  68.       .catch((err) => console.error(err))
  69.     }
  70.  
  71.     function editHandler(event){
  72.  
  73.       let li = event.currentTarget.parentElement
  74.  
  75.       let [span, _removeBtn, editBtn] = Array.from(li.children)
  76.  
  77.       let taskName = span.textContent
  78.       span.remove()
  79.       inputField = createElement("input", taskName)
  80.       li.prepend(inputField)
  81.       editBtn.remove()
  82.       let submitBtn = createElement("button", "Submit", li)
  83.  
  84.       submitBtn.addEventListener("click", submitHandler)
  85.  
  86.     }
  87.  
  88.     function submitHandler(event){
  89.  
  90.       let li = event.currentTarget.parentElement
  91.  
  92.       let [input, _removeBtn, submitBtn] = Array.from(li.children)
  93.  
  94.       let inputValue = input.value
  95.  
  96.       let httpHeaders = {
  97.         method: "PATCH",
  98.         body: JSON.stringify({name: inputValue})
  99.       }
  100.       fetch(`${DELETE_BASE_URL}${li.id}`, httpHeaders)
  101.  
  102.       submitBtn.remove()
  103.  
  104.       let editBtn = createElement("button", "Edit", li)
  105.  
  106.       let taskName = input.value
  107.  
  108.       input.remove()
  109.  
  110.       let task = createElement("span", taskName)
  111.       li.prepend(task)
  112.  
  113.     }
  114.  
  115. }
  116.  
  117. function createElement(type, content, parent, id, classes, attributes){
  118.     let element = document.createElement(type)
  119.  
  120.     if (content && type !== "input"){
  121.       element.textContent = content
  122.     }
  123.  
  124.     if (content && type === "input"){
  125.       element.value = content
  126.     }
  127.  
  128.     if (parent){
  129.       parent.appendChild(element)
  130.     }
  131.  
  132.     if (id){
  133.       element.id = id
  134.     }
  135.  
  136.     if (classes){
  137.      
  138.       element.classList.add(...classes)
  139.  
  140.     }
  141.     if (attributes){
  142.       for (const key in attributes) {
  143.         element.setAttribute(key, attributes[key])
  144.  
  145.       }
  146.     }
  147.  
  148.     return element
  149.   }
  150.  
  151. attachEvents();
  152.  
Add Comment
Please, Sign In to add comment