Advertisement
kstoyanov

07. * Bug Tracker

Oct 14th, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function bugTracker() {
  2.   let bugReports = [];
  3.   let bugId = 0;
  4.   let selector = '';
  5.  
  6.   function report(author, description, reproducible, severity) {
  7.     const createReport = {
  8.       ID: bugId++,
  9.       author,
  10.       description,
  11.       reproducible,
  12.       severity,
  13.       status: 'Open',
  14.     };
  15.     bugReports.push(createReport);
  16.     updateHTML();
  17.   }
  18.  
  19.   function setStatus(id, newStatus) {
  20.     bugReports.filter((x) => x.ID === id)[0].status = newStatus;
  21.     console.log(bugReports);
  22.     updateHTML();
  23.   }
  24.  
  25.   function remove(id) {
  26.     bugReports = bugReports.filter((x) => x.ID !== id);
  27.     updateHTML();
  28.   }
  29.  
  30.   function sort(method) {
  31.     switch (method) {
  32.       case 'author':
  33.         bugReports = bugReports.sort((a, b) => a.author.localeCompare(b.author));
  34.         break;
  35.       case 'severity':
  36.         bugReports = bugReports.sort((a, b) => a.severity - b.severity);
  37.         break;
  38.       default: // ID
  39.         bugReports = bugReports.sort((a, b) => a.ID - b.ID);
  40.         break;
  41.     }
  42.     updateHTML();
  43.   }
  44.  
  45.   function output(sel) {
  46.     selector = sel;
  47.   }
  48.  
  49.   function updateHTML() {
  50.     if (selector) {
  51.       const container = document.querySelector(selector);
  52.       let reportHTML = '';
  53.  
  54.       bugReports.map(({
  55.         ID, description, author, status, severity,
  56.       }) => {
  57.         reportHTML += `
  58.         <div id="report_${ID}" class="report">
  59.           <div class="body">
  60.             <p>${description}</p>
  61.           </div>
  62.           <div class="title">
  63.             <span class="author">Submitted by: ${author}</span>
  64.             <span class="status">${status} | ${severity}</span>
  65.           </div>
  66.         </div>
  67.       `;
  68.         container.innerHTML = reportHTML;
  69.         return container;
  70.       });
  71.     }
  72.   }
  73.  
  74.   return {
  75.     report, setStatus, remove, sort, output,
  76.   };
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement