Advertisement
GeorgiLukanov87

03. Todo List - Exam Preparation I

Mar 27th, 2023 (edited)
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // 03. Todo List
  2. // Exam Preparation I
  3. // https://judge.softuni.org/Contests/Practice/Index/3878#2
  4.  
  5. function attachEvents() {
  6.     let baseUrl = `http://localhost:3030/jsonstore/tasks/`;
  7.     const titleElement = document.getElementById('title')
  8.     const addBtnElement = document.getElementById('add-button')
  9.     const loadBtnElement = document.getElementById('load-button')
  10.     const toDoListElement = document.getElementById('todo-list')
  11.  
  12.     addBtnElement.addEventListener('click', addTask);
  13.     loadBtnElement.addEventListener('click', loadAll);
  14.  
  15.     function addTask(e) {
  16.         e.preventDefault();
  17.         if (titleElement.value === '') {
  18.             return;
  19.         }
  20.         const headers = { method: 'POST', body: JSON.stringify({ name: titleElement.value }) };
  21.         fetch(baseUrl, headers).then(() => loadAll(e));
  22.         titleElement.value = '';
  23.  
  24.     }
  25.  
  26.     function loadAll(e) {
  27.         e?.preventDefault();
  28.  
  29.         toDoListElement.innerHTML = '';
  30.         fetch(baseUrl)
  31.             .then(res => res.json())
  32.             .then(data => {
  33.                 for (let row in data) {
  34.                     let task = data[row]['name'];
  35.                     let id = data[row]['_id'];
  36.  
  37.                     let newLi = document.createElement('li');
  38.                     newLi.id = id;
  39.  
  40.                     let span = document.createElement('span');
  41.                     span.textContent = task;
  42.                     newLi.appendChild(span);
  43.  
  44.                     let removeBtn = document.createElement('button');
  45.                     removeBtn.textContent = 'Remove';
  46.                     removeBtn.addEventListener('click', removeTask);
  47.                     newLi.appendChild(removeBtn);
  48.  
  49.                     let editBtn = document.createElement('button');
  50.                     editBtn.textContent = 'Edit';
  51.                     editBtn.addEventListener('click', editTask);
  52.                     newLi.appendChild(editBtn);
  53.  
  54.                     toDoListElement.appendChild(newLi);
  55.                 }
  56.             })
  57.     }
  58.  
  59.     function removeTask(e) {
  60.         let id = e.target.parentNode.id;
  61.         let delUrl = baseUrl + `${id}`;
  62.         const headers = { method: 'DELETE', };
  63.         fetch(delUrl, headers).then(() => loadAll());
  64.     }
  65.  
  66.     function editTask(e) {
  67.         let currentLi = e.target.parentNode
  68.         let task = e.target.parentNode.children[0].textContent;
  69.         currentLi.innerHTML = '';
  70.  
  71.         let input = document.createElement('input');
  72.         input.value = task;
  73.         currentLi.appendChild(input);
  74.  
  75.         let removeBtn = document.createElement('button');
  76.         removeBtn.textContent = 'Remove';
  77.         removeBtn.addEventListener('click', removeTask);
  78.         currentLi.appendChild(removeBtn);
  79.  
  80.         let editBtn = document.createElement('button');
  81.         editBtn.textContent = 'Submit';
  82.         editBtn.addEventListener('click', submitHandle);
  83.         currentLi.appendChild(editBtn);
  84.     }
  85.  
  86.     function submitHandle(e) {
  87.         console.log(e.target.parentNode.id)
  88.         let editedTask = e.target.parentNode.children[0].value
  89.         console.log(editedTask)
  90.         let id = e.target.parentNode.id;
  91.         let patchUrl = baseUrl + `${id}`;
  92.         const headers = { method: 'PATCH', body: JSON.stringify({ name: editedTask }) };
  93.         fetch(patchUrl, headers).then(() => loadAll());
  94.     }
  95. }
  96.  
  97. attachEvents();
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement