eternalmeg

Untitled

Apr 20th, 2023
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. solve();
  2. function solve () {
  3. const baseUrl = 'http://localhost:3030/jsonstore/tasks/';
  4.  
  5. const inputDomSelectors = {
  6. courseName: document.getElementById('course-name'),
  7. type: document.getElementById('course-type'),
  8. description: document.getElementById('description'),
  9. teacher: document.getElementById('teacher-name')
  10. }
  11. const otherDomSelectors = {
  12. addCourse: document.getElementById('add-course'),
  13. editCourse: document.getElementById('edit-course'),
  14. loadCourse: document.getElementById('load-course'),
  15. form: document.getElementById('form')
  16.  
  17. }
  18.  
  19. const mainDiv = document.getElementById('list');
  20. let currentCourse =[];
  21. let courseToEdit = {};
  22.  
  23. otherDomSelectors.addCourse.addEventListener('click',addCourseHandler);
  24. otherDomSelectors.editCourse.addEventListener('click',editCourseHandler);
  25. otherDomSelectors.loadCourse.addEventListener('click',loadCourseHandler);
  26.  
  27. function addCourseHandler (event) {
  28. if (event) {
  29. event.preventDefault();
  30. }
  31. mainDiv.innerText='';
  32. const { courseName, type, description, teacher } = inputDomSelectors;
  33. const payload = JSON.stringify({courseName: courseName.value,type:type.value,description: description.value,teacher: teacher.value})
  34. const httpHeader = {
  35. method: 'POST',
  36. body: payload
  37. };
  38. fetch(baseUrl,httpHeader)
  39. .then(()=> {
  40. loadCourseHandler();
  41. Object.values(inputDomSelectors).forEach((input)=>input.value='');
  42. })
  43. .catch((err) => {
  44. console.log(err)
  45. })
  46.  
  47. }
  48. function editCourseHandler (event) {
  49. if (event) {
  50. event.preventDefault();
  51. }
  52. const { courseName, type, description, teacher, _id } = inputDomSelectors;
  53. const payload = JSON.stringify({courseName: courseName.value,type:type.value,description: description.value,teacher: teacher.value, _id})
  54. const httpHeader = {
  55. method: 'PUT',
  56. body: payload
  57. }
  58. fetch(`${baseUrl}${courseToEdit._id}`,httpHeader)
  59. .then(()=> {
  60. loadCourseHandler();
  61. })
  62. .catch((err)=> {
  63. console.log(err)
  64. })
  65. otherDomSelectors.addCourse.disabled = false;
  66. otherDomSelectors.editCourse.disabled = true;
  67.  
  68.  
  69.  
  70.  
  71. }
  72. function loadCourseHandler (event) {
  73. if (event) {event.preventDefault()
  74. }
  75.  
  76. otherDomSelectors.editCourse.disabled=true;
  77. mainDiv.innerText = '';
  78.  
  79. fetch(baseUrl)
  80. .then((res) =>res.json())
  81. .then((allCoursesRes) => {
  82. currentCourse = Object.values(allCoursesRes);
  83. for (const { courseName, type, description, teacher, _id } of currentCourse) {
  84. const div = createEl('div',mainDiv,"",['container']);
  85. div.id = _id;
  86. createEl('h2',div,courseName);
  87. createEl('h3',div,teacher);
  88. createEl('h3',div,type);
  89. createEl('h4',div, description);
  90. const editBtn = createEl('button',div,'Edit Course',['edit-btn']);
  91. const finishBtn = createEl('button',div,'Finish Course',['finish-btn'])
  92. editBtn.addEventListener('click',editBtnHandler);
  93. finishBtn.addEventListener('click',finishBtnHandler);
  94. }
  95. })
  96.  
  97. }
  98. function editBtnHandler (event) {
  99. if (event) {
  100. event.preventDefault();
  101. }
  102.  
  103. otherDomSelectors.addCourse.disabled = true;
  104. otherDomSelectors.editCourse.disabled = false;
  105.  
  106. const id = event.currentTarget.parentNode.id;
  107. courseToEdit = currentCourse.find((c)=> c._id === id);
  108. for (const key in inputDomSelectors) {
  109. inputDomSelectors[key].value = courseToEdit[key];
  110. }
  111. }
  112.  
  113. function finishBtnHandler (event) {
  114. if(event) {
  115. event.preventDefault()
  116. }
  117. const id = event.currentTarget.parentNode.id;
  118. let httpHeader = {
  119. method: 'DELETE'
  120. }
  121. fetch(`${baseUrl}${id}`,httpHeader)
  122. .then(()=>loadCourseHandler())
  123. .catch((err)=>{
  124. console.log(err)
  125. })
  126. }
  127.  
  128. function createEl(type, parentNode, content, classes, id, attributes, useInnerHtml) {
  129. const htmlEl = document.createElement(type);
  130.  
  131. if (content && useInnerHtml) {
  132. htmlEl.innerHTML = content;
  133. } else {
  134. if (content && type !== 'input') {
  135. htmlEl.textContent = content;
  136. }
  137. if (content && type === 'input') {
  138. htmlEl.value = content;
  139. }
  140. }
  141.  
  142. if (classes && classes.length > 0) {
  143. htmlEl.classList.add(...classes);
  144. }
  145.  
  146. if (id) {
  147. htmlEl.id = id;
  148. }
  149.  
  150. if (attributes) {
  151. for (const key in attributes) {
  152. htmlEl.setAttribute(key, attributes[key]);
  153. }
  154. }
  155.  
  156. if (parentNode) {
  157. parentNode.appendChild(htmlEl);
  158. }
  159.  
  160. return htmlEl;
  161.  
  162.  
  163. }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment