Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function attachEvents() {
- fetchAllBooks();
- let loadBtn = document.getElementById("loadBooks")
- loadBtn.addEventListener("click", fetchAllBooks);
- let tbody = document.querySelector("tbody");
- let createForm = document.getElementsByTagName("form")[0];
- let authorInput = document.getElementById("author");
- let titleInput = document.getElementById("title");
- let hForm = createForm.querySelector("h3");
- //create invisible save button for the updates
- let saveButton = document.createElement("button");
- saveButton.textContent = "Save";
- saveButton.style.display = "none";
- createForm.appendChild(saveButton)
- let createButton = createForm.querySelector("button");
- createButton.addEventListener("click", function (event) {
- event.preventDefault();
- let author = authorInput.value;
- let title = titleInput.value;
- createNewBook(author, title);
- });
- function fetchAllBooks() {
- let requestOptions = {
- method: 'GET',
- redirect: 'follow'
- };
- fetch("http://localhost:3030/jsonstore/collections/books", requestOptions)
- .then(response => response.json())
- .then(result => populateTable(result))
- .catch(error => alert("No books available"));
- }
- function populateTable(data) {
- tbody.innerHTML = "";
- let dataAr = Object.entries(data);
- dataAr.forEach(book => {
- let bookObj = {
- _id: book[0],
- title: book[1].title,
- author: book[1].author
- }
- createTableRow(bookObj)
- });
- titleInput.value = "";
- authorInput.value = "";
- }
- function createTableRow(book) {
- console.log(book)
- let bookTr = document.createElement("tr");
- bookTr.id = book._id;
- let authorTd = document.createElement("td");
- authorTd.textContent = book.author;
- let titleTd = document.createElement("td");
- titleTd.textContent = book.title;
- let buttonsTd = document.createElement("td");
- let editBtn = document.createElement("button");
- editBtn.textContent = "Edit";
- editBtn.addEventListener("click", (() => editBook(bookTr)));
- let deleteBtn = document.createElement("button");
- deleteBtn.textContent = "delete";
- deleteBtn.addEventListener("click", (() => deleteBook(bookTr)));
- buttonsTd.appendChild(editBtn);
- buttonsTd.appendChild(deleteBtn);
- bookTr.appendChild(titleTd);
- bookTr.appendChild(authorTd);
- bookTr.appendChild(buttonsTd);
- tbody.appendChild(bookTr);
- }
- function createNewBook(author, title) {
- authorInput.value = "";
- titleInput.value = "";
- console.log("create a book!")
- console.log(author, title)
- let newBook = {
- "author": author,
- "title": title
- }
- //post book
- let myHeaders = new Headers();
- myHeaders.append("Content-Type", "application/json");
- let requestOptions = {
- method: 'POST',
- headers: myHeaders,
- body: JSON.stringify(newBook),
- redirect: 'follow'
- };
- fetch("http://localhost:3030/jsonstore/collections/books", requestOptions)
- .then(response => response.json())
- .then(result => createTableRow(result))
- .catch(error => console.log('error', error));
- }
- function deleteBook(bookTr) {
- console.log(bookTr)
- let myHeaders = new Headers();
- myHeaders.append("Content-Type", "application/json");
- var requestOptions = {
- method: 'DELETE',
- headers: myHeaders,
- redirect: 'follow'
- };
- fetch(`http://localhost:3030/jsonstore/collections/books/${bookTr.id}`, requestOptions)
- .then(response => response.json())
- .then(result => fetchAllBooks())
- .catch(error => console.log('error', error));
- }
- function editBook(bookTr) {
- console.log(bookTr)
- hForm.textContent = "Edit FORM";
- authorInput.value = bookTr.childNodes[1].textContent;
- title.value = bookTr.childNodes[0].textContent;
- saveButton.style.display = "block";
- createButton.style.display = "none";
- saveButton.addEventListener("click", function (e) {
- e.preventDefault();
- console.log("save pressed")
- let myHeaders = new Headers();
- myHeaders.append("Content-Type", "application/json");
- var raw = JSON.stringify({
- author: authorInput.value,
- title: titleInput.value,
- _id: bookTr.id
- });
- var requestOptions = {
- method: 'PUT',
- headers: myHeaders,
- body: raw,
- redirect: 'follow'
- };
- fetch(`http://localhost:3030/jsonstore/collections/books/${bookTr.id}`, requestOptions)
- .then(response => response.json())
- .then(result => fetchAllBooks())
- .catch(error => console.log('error', error));
- hForm.textContent = "FORM";
- saveButton.style.display = "none";
- createButton.style.display = "block";
- })
- }
- }
- attachEvents();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement