diff --git a/komga-webui/src/components/FilterDrawer.vue b/komga-webui/src/components/FilterDrawer.vue new file mode 100644 index 000000000..5ec4ff224 --- /dev/null +++ b/komga-webui/src/components/FilterDrawer.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/komga-webui/src/components/FilterMenuButton.vue b/komga-webui/src/components/FilterList.vue similarity index 57% rename from komga-webui/src/components/FilterMenuButton.vue rename to komga-webui/src/components/FilterList.vue index 5254c729c..c78784eff 100644 --- a/komga-webui/src/components/FilterMenuButton.vue +++ b/komga-webui/src/components/FilterList.vue @@ -1,13 +1,5 @@ + + diff --git a/komga-webui/src/components/SortList.vue b/komga-webui/src/components/SortList.vue new file mode 100644 index 000000000..807a24a53 --- /dev/null +++ b/komga-webui/src/components/SortList.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/komga-webui/src/components/SortMenuButton.vue b/komga-webui/src/components/SortMenuButton.vue deleted file mode 100644 index 9ac3d79be..000000000 --- a/komga-webui/src/components/SortMenuButton.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/komga-webui/src/functions/filter.ts b/komga-webui/src/functions/filter.ts new file mode 100644 index 000000000..118941ec1 --- /dev/null +++ b/komga-webui/src/functions/filter.ts @@ -0,0 +1,5 @@ +export function sortOrFilterActive (sortActive: SortActive, sortDefault: SortActive, filters: FiltersActive): boolean { + const sortCustom = sortActive.key !== sortDefault.key || sortActive.order !== sortDefault.order + const filterCustom = Object.keys(filters).some(x => filters[x].length !== 0) + return sortCustom || filterCustom +} diff --git a/komga-webui/src/views/BrowseLibraries.vue b/komga-webui/src/views/BrowseLibraries.vue index d4630d1a9..e922bee8a 100644 --- a/komga-webui/src/views/BrowseLibraries.vue +++ b/komga-webui/src/views/BrowseLibraries.vue @@ -14,18 +14,11 @@ - - - - - - + + + mdi-filter-variant + + + + + + + + + @@ -72,12 +89,10 @@ import SeriesMultiSelectBar from '@/components/bars/SeriesMultiSelectBar.vue' import ToolbarSticky from '@/components/bars/ToolbarSticky.vue' import EmptyState from '@/components/EmptyState.vue' -import FilterMenuButton from '@/components/FilterMenuButton.vue' import ItemBrowser from '@/components/ItemBrowser.vue' import LibraryNavigation from '@/components/LibraryNavigation.vue' import LibraryActionsMenu from '@/components/menus/LibraryActionsMenu.vue' import PageSizeSelect from '@/components/PageSizeSelect.vue' -import SortMenuButton from '@/components/SortMenuButton.vue' import { parseQueryFilter, parseQuerySort } from '@/functions/query-params' import { ReadStatus } from '@/types/enum-books' import { SeriesStatus } from '@/types/enum-series' @@ -85,6 +100,11 @@ import { LIBRARY_CHANGED, LIBRARY_DELETED, SERIES_CHANGED } from '@/types/events import Vue from 'vue' import { Location } from 'vue-router' import { LIBRARIES_ALL } from '@/types/library' +import FilterDrawer from '@/components/FilterDrawer.vue' +import SortList from '@/components/SortList.vue' +import FilterPanels from '@/components/FilterPanels.vue' +import FilterList from '@/components/FilterList.vue' +import { sortOrFilterActive } from '@/functions/filter' const cookiePageSize = 'pagesize' @@ -94,12 +114,14 @@ export default Vue.extend({ LibraryActionsMenu, EmptyState, ToolbarSticky, - SortMenuButton, - FilterMenuButton, ItemBrowser, PageSizeSelect, LibraryNavigation, SeriesMultiSelectBar, + FilterDrawer, + FilterPanels, + FilterList, + SortList, }, data: () => { return { @@ -117,10 +139,12 @@ export default Vue.extend({ ] as SortOption[], sortActive: {} as SortActive, sortDefault: { key: 'metadata.titleSort', order: 'asc' } as SortActive, - filterOptions: { + filterOptionsList: { readStatus: { values: [ReadStatus.UNREAD], }, + } as FiltersOptions, + filterOptionsPanel: { status: { name: 'STATUS', values: Object.values(SeriesStatus), @@ -131,6 +155,7 @@ export default Vue.extend({ filterUnwatch: null as any, pageUnwatch: null as any, pageSizeUnwatch: null as any, + drawer: false, } }, props: { @@ -208,6 +233,9 @@ export default Vue.extend({ return 15 } }, + sortOrFilterActive (): boolean { + return sortOrFilterActive(this.sortActive, this.sortDefault, this.filters) + }, }, methods: { cookieSort (libraryId: string): string { diff --git a/komga-webui/src/views/BrowseSeries.vue b/komga-webui/src/views/BrowseSeries.vue index 624c15c0d..4e6528bf6 100644 --- a/komga-webui/src/views/BrowseSeries.vue +++ b/komga-webui/src/views/BrowseSeries.vue @@ -26,19 +26,11 @@ mdi-pencil - - - - - - + + mdi-filter-variant + + + + + + + + + + + + + + @@ -149,7 +165,7 @@ @@ -179,12 +195,10 @@ 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 ItemBrowser from '@/components/ItemBrowser.vue' import ItemCard from '@/components/ItemCard.vue' import SeriesActionsMenu from '@/components/menus/SeriesActionsMenu.vue' import PageSizeSelect from '@/components/PageSizeSelect.vue' -import SortMenuButton from '@/components/SortMenuButton.vue' import { parseQueryFilter, parseQuerySort } from '@/functions/query-params' import { seriesThumbnailUrl } from '@/functions/urls' import { ReadStatus } from '@/types/enum-books' @@ -192,6 +206,10 @@ import { BOOK_CHANGED, LIBRARY_DELETED, READLIST_CHANGED, SERIES_CHANGED } from import Vue from 'vue' import { Location } from 'vue-router' import { SeriesStatus } from '@/types/enum-series' +import FilterDrawer from '@/components/FilterDrawer.vue' +import FilterList from '@/components/FilterList.vue' +import SortList from '@/components/SortList.vue' +import { sortOrFilterActive } from '@/functions/filter' const tags = require('language-tags') @@ -201,8 +219,6 @@ export default Vue.extend({ name: 'BrowseSeries', components: { ToolbarSticky, - SortMenuButton, - FilterMenuButton, ItemBrowser, PageSizeSelect, SeriesActionsMenu, @@ -210,6 +226,9 @@ export default Vue.extend({ EmptyState, BooksMultiSelectBar, CollectionsExpansionPanels, + FilterDrawer, + FilterList, + SortList, }, data: () => { return { @@ -226,7 +245,7 @@ export default Vue.extend({ }] as SortOption[], sortActive: {} as SortActive, sortDefault: { key: 'metadata.numberSort', order: 'asc' } as SortActive, - filterOptions: { + filterOptionsList: { readStatus: { values: [ReadStatus.UNREAD], }, @@ -237,6 +256,7 @@ export default Vue.extend({ pageUnwatch: null as any, pageSizeUnwatch: null as any, collections: [] as CollectionDto[], + drawer: false, } }, computed: { @@ -276,6 +296,9 @@ export default Vue.extend({ } return { color: undefined, text: undefined } }, + sortOrFilterActive (): boolean { + return sortOrFilterActive(this.sortActive, this.sortDefault, this.filters) + }, }, props: { seriesId: { diff --git a/komga-webui/src/views/Home.vue b/komga-webui/src/views/Home.vue index 4fabc788e..2a580f8a2 100644 --- a/komga-webui/src/views/Home.vue +++ b/komga-webui/src/views/Home.vue @@ -1,5 +1,5 @@ - +