Advertisement
Liliana797979

book - library1 - js applications

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