Advertisement
didkoslawow

Untitled

Jun 30th, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let userData = null;
  2.  
  3.  window.addEventListener('DOMContentLoaded', () => {
  4.      userData = JSON.parse(sessionStorage.getItem('userData'));
  5.      loadPreview();
  6.  
  7.      if (userData != null) {
  8.          document.getElementById('guest').style.display = 'none';
  9.          document.getElementById('user').style.display = 'inline-block';
  10.          document.querySelector('#addForm .add').disabled = false;
  11.          document.querySelector('p.email span').textContent = userData.email;
  12.      } else {
  13.          document.getElementById('user').style.display = 'none';
  14.          document.getElementById('guest').style.display = 'inline-block';
  15.          document.querySelectorAll('#addForm input').forEach((x) => (x.disabled = true));
  16.      }
  17.  
  18.      document.querySelector('.load').addEventListener('click', loadPreview);
  19.      document.getElementById('addForm').addEventListener('submit', onSubmitCreate);
  20.      document.getElementById('logout').addEventListener('click', onLogout);
  21.  
  22.      document.getElementById('catches').addEventListener('click', onClick);
  23.  });
  24.  
  25.  async function onLogout() {
  26.      try {
  27.          const response = await fetch('http://localhost:3030/users/logout/', {
  28.              method: 'get',
  29.              headers: {
  30.                  'Content-Type': 'application/json',
  31.                  'X-Authorization': userData.token,
  32.              },
  33.          });
  34.  
  35.          if (response.ok !== true) {
  36.              const error = await response.json();
  37.              throw new Error(error.message);
  38.          }
  39.          sessionStorage.removeItem('userData');
  40.          window.location = './index.html';
  41.      } catch (e) {
  42.          alert(e.message);
  43.      }
  44.  }
  45.  
  46.  function onClick(e) {
  47.      if (e.target.tagName == 'BUTTON') {
  48.          const data = [...e.target.parentElement.getElementsByTagName('input')].reduce(
  49.              (acc, x) => Object.assign(acc, { [x.className]: x.value }),
  50.              {}
  51.          );
  52.          const id = e.target.dataset.id;
  53.  
  54.          if (e.target.textContent == 'Update') {
  55.              updateCatch(id, data);
  56.          } else {
  57.              deleteCatch(id);
  58.          }
  59.      }
  60.  }
  61.  
  62.  async function updateCatch(id, data) {
  63.      try {
  64.          if (Object.values(data).some((x) => x == '')) {
  65.              loadPreview();
  66.              throw new Error('All fields are required!');
  67.          }
  68.          const response = await fetch('http://localhost:3030/data/catches/' + id, {
  69.              method: 'put',
  70.              headers: {
  71.                  'Content-Type': 'application/json',
  72.                  'X-Authorization': userData.token,
  73.              },
  74.              body: JSON.stringify(data),
  75.          });
  76.          loadPreview();
  77.      } catch (error) {
  78.          alert(error.message);
  79.      }
  80.  }
  81.  
  82.  async function deleteCatch(id) {
  83.      try {
  84.          const response = await fetch('http://localhost:3030/data/catches/' + id, {
  85.              method: 'delete',
  86.              headers: {
  87.                  'X-Authorization': userData.token,
  88.              },
  89.          });
  90.          loadPreview();
  91.      } catch (error) {
  92.          alert(error.message);
  93.      }
  94.  }
  95.  
  96.  async function onSubmitCreate(e) {
  97.      e.preventDefault();
  98.  
  99.      const formData = new FormData(e.target);
  100.  
  101.      const data = [...formData.entries()].reduce((acc, [k, v]) => Object.assign(acc, { [k]: v }), {});
  102.  
  103.      try {
  104.          if (Object.values(data).some((x) => x == '')) {
  105.              throw new Error('All fields are required!');
  106.          }
  107.  
  108.          const response = await fetch('http://localhost:3030/data/catches/', {
  109.              method: 'post',
  110.              headers: {
  111.                  'Content-Type': 'application/json',
  112.                  'X-Authorization': userData.token,
  113.              },
  114.              body: JSON.stringify(data),
  115.          });
  116.  
  117.          if (response.ok != true) {
  118.              const err = await response.json();
  119.              throw new Error(err.message);
  120.          }
  121.  
  122.          e.target.reset();
  123.          loadPreview();
  124.      } catch (error) {
  125.          alert(error.message);
  126.      }
  127.  }
  128.  
  129.  async function loadPreview() {
  130.      const response = await fetch('http://localhost:3030/data/catches');
  131.      const data = await response.json();
  132.  
  133.      document.getElementById('catches').replaceChildren(...data.map(preview));
  134.  }
  135.  
  136.  function preview(item) {
  137.      const isDisabled = userData && item._ownerId == userData.id;
  138.  
  139.      const div = document.createElement('div');
  140.      div.className = 'catch';
  141.  
  142.      div.innerHTML = `<label>Angler</label>
  143.    <input type="text" class="angler" value="${item.angler}" ${!isDisabled ? 'disabled' : ''}>
  144.    <label>Weight</label>
  145.    <input type="text" class="weight" value="${item.weight}" ${!isDisabled ? 'disabled' : ''}>
  146.    <label>Species</label>
  147.    <input type="text" class="species" value="${item.species}" ${!isDisabled ? 'disabled' : ''}>
  148.    <label>Location</label>
  149.    <input type="text" class="location" value="${item.location}" ${!isDisabled ? 'disabled' : ''}>  
  150.    <label>Bait</label>
  151.    <input type="text" class="bait" value="${item.bait}" ${!isDisabled ? 'disabled' : ''}>
  152.    <label>Capture Time</label>
  153.    <input type="number" class="captureTime" value="${item.captureTime}" ${!isDisabled ? 'disabled' : ''}>
  154.    <button class="update" data-id="${item._id}" ${!isDisabled ? 'disabled' : ''}>Update</button>
  155.    <button class="delete" data-id="${item._id}" ${!isDisabled ? 'disabled' : ''}>Delete</button>`;
  156.  
  157.      return div;
  158.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement