Advertisement
GalinaKG

task 3 by the exam JS Front-end

Apr 9th, 2023
780
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function attachEvents() {
  2.     let BASE_URL = 'http://localhost:3030/jsonstore/tasks/';
  3.     let loadBoardBtn = document.getElementById('load-board-btn');
  4.     loadBoardBtn.addEventListener('click', onLoadBoard);
  5.     let addTaskBtn = document.getElementById('create-task-btn');
  6.     addTaskBtn.addEventListener('click', onAdd);
  7.     const titleEl = document.getElementById('title');
  8.     const descriptionEl = document.getElementById('description');
  9.     const toDoSection = document.querySelector('#todo-section .task-list');
  10.     const inProgressSection = document.querySelector('#in-progress-section .task-list');
  11.     const codeReviewSection = document.querySelector('#code-review-section .task-list');
  12.     const doneSection = document.querySelector('#done-section .task-list');
  13.     let dataStatuses = {};
  14.  
  15.     function onLoadBoard() {
  16.       toDoSection.innerHTML = '';
  17.       inProgressSection.innerHTML = '';
  18.       codeReviewSection.innerHTML = '';
  19.       doneSection.innerHTML = '';
  20.  
  21.         fetch(BASE_URL)
  22.           .then((response) => response.json())
  23.           .then((data) => {
  24.             for (let obj of Object.values(data)) {
  25.               dataStatuses[obj._id] = obj.status;
  26.               let li = document.createElement('li');
  27.               li.className = 'task';
  28.               createElement('h3', li, obj.title);
  29.               createElement('p', li, obj.description);
  30.               let button = createElement('button', li);
  31.               button.id = obj._id;
  32.               if (obj.status !== 'Done') {
  33.                 button.addEventListener('click', onMove);
  34.               } else {
  35.                 button.addEventListener('click', onDelete);
  36.               }
  37.  
  38.               if (obj.status == "ToDo") {
  39.                 button.textContent = 'Move to In Progress';
  40.                 toDoSection.appendChild(li);
  41.  
  42.               } else if (obj.status == 'In Progress') {
  43.                 button.textContent = 'Move to Code Review';
  44.                 inProgressSection.appendChild(li);
  45.  
  46.               } else if (obj.status == "Code Review") {
  47.                 button.textContent = 'Move to Done';
  48.                 codeReviewSection.appendChild(li);
  49.  
  50.               } else if (obj.status == "Done") {
  51.                 button.textContent = 'Close';
  52.                 doneSection.appendChild(li);
  53.               }
  54.             }
  55.           })
  56.           .catch((err) => console.error(err));
  57.     }
  58.  
  59.     function onAdd() {
  60.       let data = {  
  61.         "title": titleEl.value,
  62.         "description": descriptionEl.value,
  63.         "status": "ToDo"
  64.       };
  65.    
  66.       fetch(BASE_URL, {
  67.         method: 'POST',
  68.         body: JSON.stringify(data)
  69.       });
  70.       titleEl.value = '';
  71.       descriptionEl.value = '';
  72.       onLoadBoard();
  73.     }
  74.  
  75.     function onMove(e) {
  76.        let id = e.target.id;
  77.        let currStatus = dataStatuses[id];
  78.        let status = '';
  79.        if (currStatus == 'ToDo') {
  80.           status = 'In Progress';
  81.        } else if (currStatus == 'In Progress') {
  82.           status = 'Code Review';
  83.        } else if (currStatus == 'Code Review') {
  84.           status = 'Done';
  85.        }
  86.  
  87.        fetch(BASE_URL + id, {
  88.          method: 'PATCH',
  89.          body: JSON.stringify({ "status": status })
  90.        });
  91.        onLoadBoard();
  92.     }
  93.  
  94.     function onDelete(e) {
  95.       let id = e.target.id;
  96.       fetch(BASE_URL + id, {
  97.         method: 'DELETE'
  98.       });
  99.       onLoadBoard();
  100.     }
  101.  
  102.     function createElement(type, parentNode, content, classes, id, attributes, useInnerHtml) {
  103.       const htmlElement = document.createElement(type);
  104.    
  105.       if (content && useInnerHtml) {
  106.         htmlElement.innerHTML = content;
  107.       } else {
  108.         if (content && type !== 'input') {
  109.           htmlElement.textContent = content;
  110.         }
  111.    
  112.         if (content && type === 'input') {
  113.           htmlElement.value = content;
  114.         }
  115.       }
  116.    
  117.       if (classes && classes.length > 0) {
  118.         htmlElement.classList.add(...classes);
  119.       }
  120.    
  121.       if (id) {
  122.         htmlElement.id = id;
  123.       }
  124.    
  125.       // { src: 'link', href: 'http' }
  126.       if (attributes) {
  127.         for (const key in attributes) {
  128.           htmlElement.setAttribute(key, attributes[key])
  129.         }
  130.       }
  131.    
  132.       if (parentNode) {
  133.         parentNode.appendChild(htmlElement);
  134.       }
  135.    
  136.       return htmlElement;
  137.     }
  138. }  
  139.  
  140. attachEvents();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement