Kamend1

03.Sports Tracker

Apr 7th, 2025
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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();
Add Comment
Please, Sign In to add comment