Premiere - Book List

by Pedro Moreira

HTML

<script src="https://unpkg.com/premiere/dist/premiere.min.js"></script>
<section>
  <header>
    <h1>Book List</h1>
  </header>

  <pre id="books"></pre>
  <button type="button" onclick="createBook()">New book</button>
  <button type="button" onclick="deleteBook()">Delete First Book</button>
</section>

Babel + JSX

// import {Api, Model} from 'premiere';
let {Api, Model} = Premiere; // Use the line above outside of JSFiddle

Api.base = 'http://rest.learncode.academy/api/premiere-book-list/';

class Book extends Model {
  static path = 'books';
  
  static first() {
    return new Promise((resolve, reject) => {
      Book.all().then((books) => {
        books.length ? resolve(books[0]) : reject('No books found');
      }, reject);
    });
  }
}

window.createBook = () => {
  var name = prompt('Please enter the book name');
  if (!name) return;

  Book.save({name}).then(() => listBooks());
}

window.deleteBook = () => {
  Book.first().then((book) => book.destroy().then(() => listBooks()))
};

function listBooks() {
  $('#books').text('Loading Books');
  Book.all().then((books) => {
    var text = books.length ?
      JSON.stringify(books, null, '\t') : 'No books found :/'
    $('#books').text(text);
  }, (error) => $('#books').text('Failed to load books'));
}

listBooks();