From d89533ded69f58a96a2c1062067858b589857b00 Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Mon, 29 Jun 2020 11:37:26 +0800 Subject: [PATCH] fix(webui): lazy load collections on browse series also adjusted layout for smaller screens --- .../components/CollectionsExpansionPanels.vue | 71 ++++++++++++++++++ komga-webui/src/components/ItemBrowser.vue | 35 +++++---- komga-webui/src/views/BrowseSeries.vue | 72 +++---------------- komga-webui/src/views/Dashboard.vue | 26 ++++--- komga-webui/src/views/Search.vue | 28 +++++--- 5 files changed, 140 insertions(+), 92 deletions(-) create mode 100644 komga-webui/src/components/CollectionsExpansionPanels.vue diff --git a/komga-webui/src/components/CollectionsExpansionPanels.vue b/komga-webui/src/components/CollectionsExpansionPanels.vue new file mode 100644 index 0000000000..1a7b2e0a23 --- /dev/null +++ b/komga-webui/src/components/CollectionsExpansionPanels.vue @@ -0,0 +1,71 @@ + + + diff --git a/komga-webui/src/components/ItemBrowser.vue b/komga-webui/src/components/ItemBrowser.vue index a84743cf33..aaa92a4295 100644 --- a/komga-webui/src/components/ItemBrowser.vue +++ b/komga-webui/src/components/ItemBrowser.vue @@ -14,24 +14,25 @@ :class="flexClass" >
@@ -84,6 +85,10 @@ export default Vue.extend({ type: Array, required: true, }, + fixedItemWidth: { + type: Number, + required: false, + }, selectable: { type: Boolean, default: true, @@ -110,6 +115,10 @@ export default Vue.extend({ type: Boolean, default: false, }, + actionMenu: { + type: Boolean, + default: true, + }, }, data: () => { return { @@ -152,7 +161,7 @@ export default Vue.extend({ return this.items.length > 0 }, itemWidth (): number { - return this.width + return this.fixedItemWidth ? this.fixedItemWidth : this.width }, shouldPreselect (): boolean { return this.selectedItems.length > 0 diff --git a/komga-webui/src/views/BrowseSeries.vue b/komga-webui/src/views/BrowseSeries.vue index 3a336f833e..0e4c6bac92 100644 --- a/komga-webui/src/views/BrowseSeries.vue +++ b/komga-webui/src/views/BrowseSeries.vue @@ -74,65 +74,21 @@ - + - - - {{ c.name }} collection - - - - - - - - + - - - {{ c.name }} collection - - - - - - - - + + + - + import Badge from '@/components/Badge.vue' +import BooksMultiSelectBar from '@/components/bars/BooksMultiSelectBar.vue' +import ToolbarSticky from '@/components/bars/ToolbarSticky.vue' +import CollectionsExpansionPanels from '@/components/CollectionsExpansionPanels.vue' import EmptyState from '@/components/EmptyState.vue' import FilterMenuButton from '@/components/FilterMenuButton.vue' -import HorizontalScroller from '@/components/HorizontalScroller.vue' import ItemBrowser from '@/components/ItemBrowser.vue' import ItemCard from '@/components/ItemCard.vue' -import PageSizeSelect from '@/components/PageSizeSelect.vue' import SeriesActionsMenu from '@/components/menus/SeriesActionsMenu.vue' +import PageSizeSelect from '@/components/PageSizeSelect.vue' import SortMenuButton from '@/components/SortMenuButton.vue' -import ToolbarSticky from '@/components/bars/ToolbarSticky.vue' import { parseQueryFilter, parseQuerySort } from '@/functions/query-params' import { seriesThumbnailUrl } from '@/functions/urls' import { ReadStatus } from '@/types/enum-books' import { BOOK_CHANGED, LIBRARY_DELETED, SERIES_CHANGED } from '@/types/events' import Vue from 'vue' -import BooksMultiSelectBar from '@/components/bars/BooksMultiSelectBar.vue' const cookiePageSize = 'pagesize' @@ -192,10 +148,10 @@ export default Vue.extend({ ItemBrowser, PageSizeSelect, SeriesActionsMenu, - HorizontalScroller, ItemCard, EmptyState, BooksMultiSelectBar, + CollectionsExpansionPanels, }, data: () => { return { @@ -219,8 +175,6 @@ export default Vue.extend({ pageUnwatch: null as any, pageSizeUnwatch: null as any, collections: [] as CollectionDto[], - collectionsContent: [] as any[][], - collectionPanel: -1, } }, computed: { @@ -294,7 +248,6 @@ export default Vue.extend({ this.totalElements = null this.books = [] this.collections = [] - this.collectionPanel = -1 this.loadSeries(Number(to.params.seriesId)) @@ -348,9 +301,6 @@ export default Vue.extend({ async loadSeries (seriesId: number) { this.series = await this.$komgaSeries.getOneSeries(seriesId) this.collections = await this.$komgaSeries.getCollections(seriesId) - for (const c of this.collections) { - this.collectionsContent[c.id] = (await this.$komgaCollections.getSeries(c.id, { unpaged: true } as PageRequest)).content - } await this.loadPage(seriesId, this.page, this.sortActive) }, parseQuerySortOrDefault (querySort: any): SortActive { diff --git a/komga-webui/src/views/Dashboard.vue b/komga-webui/src/views/Dashboard.vue index dbb18cbbb9..8e1e9c3f85 100644 --- a/komga-webui/src/views/Dashboard.vue +++ b/komga-webui/src/views/Dashboard.vue @@ -17,7 +17,7 @@ @edit="editMultipleBooks" /> - + - + @@ -35,11 +35,12 @@ :edit-function="singleEditBook" :selected.sync="selectedBooks" :selectable="selectedSeries.length === 0" + :fixed-item-width="fixedCardWidth" /> - + @@ -49,11 +50,12 @@ :edit-function="singleEditBook" :selected.sync="selectedBooks" :selectable="selectedSeries.length === 0" + :fixed-item-width="fixedCardWidth" /> - + @@ -63,11 +65,12 @@ :edit-function="singleEditSeries" :selected.sync="selectedSeries" :selectable="selectedBooks.length === 0" + :fixed-item-width="fixedCardWidth" /> - + @@ -77,11 +80,12 @@ :edit-function="singleEditSeries" :selected.sync="selectedSeries" :selectable="selectedBooks.length === 0" + :fixed-item-width="fixedCardWidth" /> - + @@ -91,6 +95,7 @@ :edit-function="singleEditBook" :selected.sync="selectedBooks" :selectable="selectedSeries.length === 0" + :fixed-item-width="fixedCardWidth" /> @@ -99,14 +104,14 @@