Advertisement
Liliana797979

book - library - js applications

Nov 8th, 2021
713
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const tbody = document.querySelector('tbody')
  2. const createForm = document.getElementById('createForm');
  3. const editForm = document.getElementById('editForm')
  4. document.getElementById('loadBooks').addEventListener('click', loadBooks.bind(null, 1, 2, 3));
  5. createForm.addEventListener('submit', onCreate);
  6. editForm.addEventListener('submit', onEditSubmit);
  7. tbody.addEventListener('click', onTableClick);
  8.  
  9.  
  10. loadBooks();
  11.  
  12. async function onEditSubmit(e){
  13.     e.preventDefault();
  14.     const formData = new FormData(e.target);
  15.  
  16.     const id = formData.get('id');
  17.     const author = formData.get('author');
  18.     const title = formData.get('title');
  19.  
  20.     const result = await updateBook(id, { author, title });
  21.  
  22.     e.target.reset();
  23.     createForm.style.display = 'block';
  24.     editForm.style.display = 'none';
  25.  
  26.     loadBooks();
  27. }
  28.  
  29. function onTableClick(e){
  30.     if (e.target.className == 'delete'){
  31.         onDelete(e.target);
  32.     } else if(e.target.className == 'edit'){
  33.         onEdit(e.target);
  34.     }
  35. }
  36.  
  37. async function onEdit(button){
  38.     const id = button.parentElement.dataset.id;
  39.     const book = await loadBookById(id);
  40.  
  41.     createForm.style.display = 'none';
  42.     editForm.style.display = 'block';
  43.  
  44.     editForm.querySelector('[name="id"]').value = id;
  45.     editForm.querySelector('[name="author"]').value = book.author;
  46.     editForm.querySelector('[name="title"]').value = book.title;
  47.  
  48. }
  49.  
  50. async function onDelete(button){
  51.     const id = button.parentElement.dataset.id;
  52.     await deleteBook(id);
  53.     button.parentElement.parentElement.remove();
  54. }
  55.  
  56.  
  57. async function onCreate(e){
  58.     e.preventDefault();
  59.     const formData = new FormData(e.target);
  60.  
  61.     const author = formData.get('author');
  62.     const title = formData.get('title');
  63.  
  64.     const result = await createBook({ author, title });
  65.     tbody.appendChild(createRow(result._id, result))
  66.     e.target.reset();
  67. }
  68.  
  69. async function loadBooks(p1, p2, p3, event){
  70.  
  71.     const books = await request('http://localhost:3030/jsonstore/collections/books');
  72.     const result = Object.entries(books).map(([id, book]) => createRow(id, book));
  73.     tbody.replaceChildren(...result);
  74. }
  75.  
  76. async function loadBookById(id){
  77.     const book = await request('http://localhost:3030/jsonstore/collections/books/' + id);
  78.     return book;
  79. }
  80.  
  81.  
  82.  
  83. function createRow(id, book){
  84.     const row = document.createElement('tr');
  85.     row.innerHTML = `<td>${book.title}</td>
  86.     <td>${book.author}</td>
  87.     <td data-id=${id}>
  88.         <button class="edit">Edit</button>
  89.         <button class="delete">Delete</button>
  90.     </td>`;
  91.     return row;
  92. }
  93.  
  94.  
  95. async function createBook(book){
  96.     const result = await request('http://localhost:3030/jsonstore/collections/books', {
  97.         method: 'post',
  98.         body: JSON.stringify(book)
  99.     });
  100.     return result;
  101. }
  102.  
  103.  
  104. async function updateBook(id, book){
  105.  
  106.     const result = await request('http://localhost:3030/jsonstore/collections/books/' + id, {
  107.         method: 'put',
  108.         body: JSON.stringify(book)
  109.     });
  110.     return result;
  111. }
  112.  
  113.  
  114.  
  115. async function deleteBook(id){
  116.     const result = await request('http://localhost:3030/jsonstore/collections/books/' + id, {
  117.         method: 'delete',    
  118.     });
  119.     return result;
  120. }
  121.  
  122.  
  123.  
  124. async function request(url, options){
  125.     if (options && options.body != undefined){
  126.        Object.assign(options, {
  127.         headers: {
  128.             'Content-Type': 'application/json'
  129.         },
  130.        });
  131.     }
  132.     const res = await fetch(url, options)
  133.  
  134.     if(res.ok != true){
  135.         const error = await res.json();
  136.         alert(error.message);
  137.         throw new Error(error.message);
  138.     }
  139.  
  140.     const data = await res.json();
  141.     return data;
  142. }
  143.  
  144.      
  145.  
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement