Advertisement
Kamend1

03.SportTracker

Apr 7th, 2025
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. function tracker() {
  2. let baseUrl = `http://localhost:3030/jsonstore/workout/`;
  3.  
  4. let loadBtn = document.getElementById('load-workout');
  5. let listDiv = document.getElementById('list');
  6. let workOutField = document.getElementById('workout');
  7. let locationField = document.getElementById('location');
  8. let dateField = document.getElementById('date');
  9.  
  10. let addBtn = document.getElementById('add-workout');
  11. let editBtn = document.getElementById('edit-workout');
  12.  
  13. let currentID = null;
  14.  
  15. loadBtn.addEventListener('click', getWorkOuts);
  16. addBtn.addEventListener('click', function (e) {
  17. e.preventDefault();
  18. addWorkOut();
  19. });
  20.  
  21. editBtn.addEventListener('click', function (e) {
  22. e.preventDefault();
  23.  
  24. if (!currentID) return;
  25.  
  26. let updatedWorkOut = {
  27. workout: workOutField.value,
  28. location: locationField.value,
  29. date: dateField.value
  30. };
  31.  
  32. putWorkOutChanges(currentID, updatedWorkOut);
  33. });
  34.  
  35. async function getWorkOuts() {
  36. let response = await fetch(baseUrl);
  37. let data = await response.json();
  38. let workouts = Object.values(data);
  39. console.log(workouts);
  40.  
  41. listDiv.replaceChildren();
  42.  
  43. for (let workout of workouts) {
  44. let container = document.createElement('div');
  45. container.classList.add('container');
  46.  
  47. let title = document.createElement('h2');
  48. title.textContent = workout.workout;
  49.  
  50. let date = document.createElement('h3');
  51. date.textContent = workout.date;
  52.  
  53. let loc = document.createElement('h3');
  54. loc.textContent = workout.location;
  55.  
  56. let btnGroup = document.createElement('div');
  57. btnGroup.classList.add('buttons-container');
  58.  
  59. let changeBtn = document.createElement('button');
  60. changeBtn.classList.add('change-btn');
  61. changeBtn.textContent = 'Change';
  62. changeBtn.dataset.id = workout._id;
  63. console.log(workout._id);
  64. changeBtn.addEventListener('click', editWorkOut);
  65.  
  66. let deleteBtn = document.createElement('button');
  67. deleteBtn.classList.add('delete-btn');
  68. deleteBtn.textContent = 'Done';
  69. deleteBtn.dataset.id = workout._id;
  70. deleteBtn.addEventListener('click', deleteWorkOut);
  71.  
  72. btnGroup.append(changeBtn, deleteBtn);
  73. container.append(title, date, loc, btnGroup);
  74. listDiv.appendChild(container);
  75. }
  76. }
  77.  
  78. async function addWorkOut() {
  79. let workout = workOutField.value;
  80. let location = locationField.value;
  81. let date = dateField.value;
  82.  
  83. if (!workout || !location || !date) {
  84. return;
  85. }
  86.  
  87. let newWorkout = { workout, location, date };
  88.  
  89. await fetch(baseUrl, {
  90. method: 'POST',
  91. headers: { 'Content-type': 'application/json' },
  92. body: JSON.stringify(newWorkout),
  93. });
  94.  
  95. clearForm();
  96. getWorkOuts();
  97. }
  98.  
  99. function editWorkOut(e) {
  100. let container = e.currentTarget.parentElement.parentElement;
  101. currentID = e.currentTarget.dataset.id;
  102.  
  103. let workout = container.querySelector('h2').textContent;
  104. let date = container.querySelector('h3:nth-of-type(1)').textContent;
  105. let location = container.querySelector('h3:nth-of-type(2)').textContent;
  106.  
  107. workOutField.value = workout;
  108. dateField.value = date;
  109. locationField.value = location;
  110.  
  111. container.remove();
  112.  
  113. addBtn.disabled = true;
  114. editBtn.disabled = false;
  115. }
  116.  
  117. async function putWorkOutChanges(id, data) {
  118. await fetch(baseUrl + id, {
  119. method: 'PUT',
  120. headers: { 'Content-type': 'application/json' },
  121. body: JSON.stringify(data)
  122. });
  123.  
  124. clearForm();
  125. currentID = null;
  126. getWorkOuts();
  127. addBtn.disabled = false;
  128. editBtn.disabled = true;
  129. }
  130.  
  131. async function deleteWorkOut(e) {
  132. let id = e.currentTarget.dataset.id;
  133.  
  134. await fetch(baseUrl + id, { method: 'DELETE' });
  135.  
  136. getWorkOuts();
  137. }
  138.  
  139. function clearForm() {
  140. workOutField.value = '';
  141. locationField.value = '';
  142. dateField.value = '';
  143. }
  144. }
  145.  
  146. tracker();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement