Advertisement
bebo231312312321

Untitled

Oct 31st, 2024
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const url = 'http://localhost:3030/jsonstore/collections/books';
  2. const table = document.querySelector('table tbody');
  3. const form = document.querySelector('form');
  4. const submitBtn = document.querySelector('form button');
  5. const h3 = document.querySelector('form h3');
  6. let saveId = '';
  7.  
  8. document.getElementById('loadBooks').addEventListener('click', getBooksData);
  9. form.addEventListener('submit', submitData);
  10.  
  11. async function getBooksData() {
  12.   try {
  13.     const res = await fetch(url);
  14.  
  15.     if (res.ok == false) {
  16.       const error = await res.json();
  17.       throw new Error(error.message);
  18.     }
  19.  
  20.     const data = await res.json();
  21.     table.replaceChildren();
  22.  
  23.     const entries = Object.entries(data);
  24.     entries.forEach(([id, { author, title }]) => create(id, author, title));
  25.   } catch (err) {
  26.     alert(err.message);
  27.   }
  28. }
  29.  
  30. async function submitData(e) {
  31.   e.preventDefault();
  32.  
  33.   const formData = new FormData(e.target);
  34.   const { title, author } = Object.fromEntries(formData.entries());
  35.  
  36.   if (title == '' || author == '') {
  37.     alert('All fields must be filled!');
  38.     return;
  39.   }
  40.  
  41.   if (submitBtn.textContent == 'Save') {
  42.     editData({ author, title });
  43.     return;
  44.   }
  45.  
  46.   try {
  47.     const res = await fetch(url, {
  48.       method: 'POST',
  49.       headers: {
  50.         'Content-Type': 'application/json',
  51.       },
  52.       body: JSON.stringify({ author, title }),
  53.     });
  54.  
  55.     if (res.ok == false) {
  56.       const error = await res.json();
  57.       throw new Error(error.message);
  58.     }
  59.  
  60.     getBooksData();
  61.   } catch (err) {
  62.     alert(err.message);
  63.   }
  64.   form.reset();
  65. }
  66.  
  67. async function editData(body) {
  68.   try {
  69.     const res = await fetch(`${url}/${saveId}`, {
  70.       method: 'PUT',
  71.       headers: {
  72.         'Content-Type': 'application/json',
  73.       },
  74.       body: JSON.stringify(body),
  75.     });
  76.  
  77.     if (res.ok == false) {
  78.       const error = await res.json();
  79.       throw new Error(error.message);
  80.     }
  81.   } catch (err) {
  82.     alert(err.message);
  83.   }
  84.   h3.textContent = 'Edit';
  85.   submitBtn.textContent = 'Submit';
  86.   form.reset();
  87.   getBooksData();
  88. }
  89.  
  90. function create(id, author, title) {
  91.   const tr = document.createElement('tr');
  92.   tr.id = id;
  93.  
  94.   const td1 = document.createElement('td');
  95.   const td2 = document.createElement('td');
  96.   const td3 = document.createElement('td');
  97.  
  98.   td1.textContent = author;
  99.   td2.textContent = title;
  100.  
  101.   const editBtn = document.createElement('button');
  102.   const deleteBtn = document.createElement('button');
  103.   editBtn.textContent = 'Edit';
  104.   deleteBtn.textContent = 'Delete';
  105.  
  106.   editBtn.addEventListener('click', () => onEdit(id));
  107.   deleteBtn.addEventListener('click', () => onDelete(id));
  108.  
  109.   [editBtn, deleteBtn].forEach((x) => td3.appendChild(x));
  110.   [td2, td1, td3].forEach((x) => tr.appendChild(x));
  111.   table.appendChild(tr);
  112. }
  113.  
  114. async function onDelete(id) {
  115.   await fetch(`${url}/${id}`, {
  116.     method: 'DELETE',
  117.   });
  118.   getBooksData();
  119. }
  120.  
  121. function onEdit(id) {
  122.   saveId = id;
  123.   const element = document.getElementById(id).children;
  124.   const [title, author] = element;
  125.   h3.textContent = 'Edit FORM';
  126.   submitBtn.textContent = 'Save';
  127.   form.querySelector('input[name=author]').value = author.textContent;
  128.   form.querySelector('input[name=title]').value = title.textContent;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement