goodreads-bookshelf
Version:
Facade of Goodreads Bookshelf
48 lines (47 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseBookshelf = void 0;
var shelf_1 = require("./shelf");
var BaseBookshelf = /** @class */ (function () {
function BaseBookshelf(books) {
this._books = books;
}
BaseBookshelf.prototype.readBooks = function () {
return this._books.filter(function (book) { return book.shelf() === shelf_1.Shelf.READ; }).sort(this.sortRecentlyFinishedBooksFirst);
};
BaseBookshelf.prototype.readingBooks = function () {
return this._books
.filter(function (book) { return book.shelf() === shelf_1.Shelf.CURRENTLYREADING; })
.sort(this.sortRecentlyStartedBooksFirst);
};
BaseBookshelf.prototype.readBooksGroupedByYear = function () {
var yearlyBooks = {};
this.readBookYears().forEach(function (year) {
yearlyBooks[year] = [];
});
this.readBooks().forEach(function (book) {
yearlyBooks[book.yearFinished()].push(book);
});
return yearlyBooks;
};
BaseBookshelf.prototype.readBookYears = function () {
var years = [];
this.readBooks().forEach(function (book) {
var shouldAdd = !Number.isNaN(book.yearFinished()) && !years.includes(book.yearFinished());
if (shouldAdd) {
years.push(book.yearFinished());
}
});
return years.sort(function (a, b) {
return a - b;
});
};
BaseBookshelf.prototype.sortRecentlyFinishedBooksFirst = function (a, b) {
return b.dateFinished().getTime() - a.dateFinished().getTime();
};
BaseBookshelf.prototype.sortRecentlyStartedBooksFirst = function (a, b) {
return b.dateStarted().getTime() - a.dateStarted().getTime();
};
return BaseBookshelf;
}());
exports.BaseBookshelf = BaseBookshelf;