diff --git a/komga-webui/src/views/Dashboard.vue b/komga-webui/src/views/Dashboard.vue index e86463f2e..dbb18cbbb 100644 --- a/komga-webui/src/views/Dashboard.vue +++ b/komga-webui/src/views/Dashboard.vue @@ -1,58 +1,100 @@ @@ -63,10 +105,18 @@ import { ReadStatus } from '@/types/enum-books' import { BOOK_CHANGED, LIBRARY_DELETED, SERIES_CHANGED } from '@/types/events' import Vue from 'vue' import ItemBrowser from '@/components/ItemBrowser.vue' +import SeriesMultiSelectBar from '@/components/bars/SeriesMultiSelectBar.vue' +import BooksMultiSelectBar from '@/components/bars/BooksMultiSelectBar.vue' export default Vue.extend({ name: 'Dashboard', - components: { HorizontalScroller, EmptyState, ItemBrowser }, + components: { + HorizontalScroller, + EmptyState, + ItemBrowser, + BooksMultiSelectBar, + SeriesMultiSelectBar, + }, data: () => { return { newSeries: [] as SeriesDto[], @@ -74,6 +124,8 @@ export default Vue.extend({ latestBooks: [] as BookDto[], inProgressBooks: [] as BookDto[], onDeckBooks: [] as BookDto[], + selectedSeries: [] as SeriesDto[], + selectedBooks: [] as BookDto[], } }, created () { @@ -90,11 +142,11 @@ export default Vue.extend({ this.loadAll() }, watch: { - editSeriesSingle (val: SeriesDto) { - this.replaceSeries(val) + selectedSeries (val: SeriesDto[]) { + val.forEach(i => this.replaceSeries(i)) }, - editBookSingle (val: BookDto) { - this.replaceBook(val) + selectedBooks (val: BookDto[]) { + val.forEach(i => this.replaceBook(i)) }, }, computed: { @@ -167,6 +219,47 @@ export default Vue.extend({ singleEditBook (book: BookDto) { this.$store.dispatch('dialogUpdateBooks', book) }, + async markSelectedSeriesRead () { + await Promise.all(this.selectedSeries.map(s => + this.$komgaSeries.markAsRead(s.id), + )) + this.selectedSeries = await Promise.all(this.selectedSeries.map(s => + this.$komgaSeries.getOneSeries(s.id), + )) + }, + async markSelectedSeriesUnread () { + await Promise.all(this.selectedSeries.map(s => + this.$komgaSeries.markAsUnread(s.id), + )) + this.selectedSeries = await Promise.all(this.selectedSeries.map(s => + this.$komgaSeries.getOneSeries(s.id), + )) + }, + addToCollection () { + this.$store.dispatch('dialogAddSeriesToCollection', this.selectedSeries) + }, + editMultipleSeries () { + this.$store.dispatch('dialogUpdateSeries', this.selectedSeries) + }, + editMultipleBooks () { + this.$store.dispatch('dialogUpdateBooks', this.selectedBooks) + }, + async markSelectedBooksRead () { + await Promise.all(this.selectedBooks.map(b => + this.$komgaBooks.updateReadProgress(b.id, { completed: true }), + )) + this.selectedBooks = await Promise.all(this.selectedBooks.map(b => + this.$komgaBooks.getBook(b.id), + )) + }, + async markSelectedBooksUnread () { + await Promise.all(this.selectedBooks.map(b => + this.$komgaBooks.deleteReadProgress(b.id), + )) + this.selectedBooks = await Promise.all(this.selectedBooks.map(b => + this.$komgaBooks.getBook(b.id), + )) + }, }, })