+
Все книги серии
@@ -774,11 +786,11 @@ class Search {
if (!this.showCounts || item.count === undefined)
return result;
- if (item.loadedBooks) {
+ if (item.booksLoaded) {
let count = 0;
- for (const book of item.loadedBooks) {
+ for (const book of item.booksLoaded) {
if (book.type == 'series')
- count += book.books.length;
+ count += book.seriesBooks.length;
else
count++;
}
@@ -897,12 +909,12 @@ class Search {
return this.expandedSeries.indexOf(seriesItem.key) >= 0;
}
- isFoundSeriesBook(book, subbook) {
- if (!book.booksSet) {
- book.booksSet = new Set(book.books.map(b => b.id));
+ isFoundSeriesBook(seriesItem, seriesBook) {
+ if (!seriesItem.booksSet) {
+ seriesItem.booksSet = new Set(seriesItem.seriesBooks.map(b => b.id));
}
- return book.booksSet.has(subbook.id);
+ return seriesItem.booksSet.has(seriesBook.id);
}
setSetting(name, newValue) {
@@ -1062,22 +1074,23 @@ class Search {
async getSeriesBooks(seriesItem) {
//асинхронно подгружаем все книги серии, блокируем повторный вызов
- if (seriesItem.allBooks === null) {
- seriesItem.allBooks = undefined;
+ if (seriesItem.allBooksLoaded === null) {
+ seriesItem.allBooksLoaded = undefined;
(async() => {
- seriesItem.allBooks = await this.loadSeriesBooks(seriesItem.series);
+ seriesItem.allBooksLoaded = await this.loadSeriesBooks(seriesItem.series);
- if (seriesItem.allBooks) {
- seriesItem.allBooks = seriesItem.allBooks.filter(book => (this.showDeleted || !book.del));
- this.sortSeriesBooks(seriesItem.allBooks);
+ if (seriesItem.allBooksLoaded) {
+ seriesItem.allBooksLoaded = seriesItem.allBooksLoaded.filter(book => (this.showDeleted || !book.del));
+ this.sortSeriesBooks(seriesItem.allBooksLoaded);
+ this.showMoreSeries(seriesItem);
} else {
- seriesItem.allBooks = null;
+ seriesItem.allBooksLoaded = null;
}
})();
}
}
- filterBooks(loadedBooks) {
+ filterBooks(books) {
const s = this.search;
const emptyFieldValue = '?';
@@ -1125,7 +1138,7 @@ class Search {
}
};
- return loadedBooks.filter((book) => {
+ return books.filter((book) => {
//author
let authorFound = false;
const authors = splitAuthor(book.author);
@@ -1171,22 +1184,37 @@ class Search {
}
showMore(item, all = false) {
- if (item.loadedBooks) {
+ if (item.booksLoaded) {
const currentLen = (item.books ? item.books.length : 0);
let books;
if (all) {
- books = item.loadedBooks;
+ books = item.booksLoaded;
} else {
- books = item.loadedBooks.slice(0, currentLen + showMoreCount);
+ books = item.booksLoaded.slice(0, currentLen + showMoreCount);
}
- item.showMore = (books.length < item.loadedBooks.length);
+ item.showMore = (books.length < item.booksLoaded.length);
item.books = books;
}
}
- sortSeriesBooks(books) {
- books.sort((a, b) => {
+ showMoreSeries(seriesItem, all = false) {
+ if (seriesItem.allBooksLoaded) {
+ const currentLen = (seriesItem.allBooks ? seriesItem.allBooks.length : 0);
+ let books;
+ if (all) {
+ books = seriesItem.allBooksLoaded;
+ } else {
+ books = seriesItem.allBooksLoaded.slice(0, currentLen + showMoreCount);
+ }
+
+ seriesItem.showMore = (books.length < seriesItem.allBooksLoaded.length);
+ seriesItem.allBooks = books;
+ }
+ }
+
+ sortSeriesBooks(seriesBooks) {
+ seriesBooks.sort((a, b) => {
const dserno = (a.serno || Number.MAX_VALUE) - (b.serno || Number.MAX_VALUE);
const dtitle = a.title.localeCompare(b.title);
const dext = a.ext.localeCompare(b.ext);
@@ -1220,9 +1248,8 @@ class Search {
})();
}
- const loadedBooks = await this.loadBooks(item.key);
-
- const filtered = this.filterBooks(loadedBooks);
+ const booksToFilter = await this.loadBooks(item.key);
+ const filtered = this.filterBooks(booksToFilter);
const prepareBook = (book) => {
return Object.assign(
@@ -1246,16 +1273,18 @@ class Search {
key: `${item.author}-${book.series}`,
type: 'series',
series: book.series,
+ allBooksLoaded: null,
allBooks: null,
showAllBooks: false,
+ showMore: false,
- books: [],
+ seriesBooks: [],
}));
seriesIndex[book.series] = index;
}
- books[index].books.push(prepareBook(book));
+ books[index].seriesBooks.push(prepareBook(book));
} else {
books.push(prepareBook(book));
}
@@ -1273,7 +1302,7 @@ class Search {
//сортировка внутри серий
for (const book of books) {
if (book.type == 'series') {
- this.sortSeriesBooks(book.books);
+ this.sortSeriesBooks(book.seriesBooks);
//асинхронно подгрузим все книги серии, если она раскрыта
if (this.isExpandedSeries(book)) {
@@ -1286,7 +1315,7 @@ class Search {
this.expandSeries(books[0]);
}
- item.loadedBooks = books;
+ item.booksLoaded = books;
this.showMore(item);
await this.$nextTick();
@@ -1351,7 +1380,7 @@ class Search {
author: rec.author,
name: rec.author.replace(/,/g, ', '),
count,
- loadedBooks: false,
+ booksLoaded: false,
books: false,
bookLoading: false,
showMore: false,