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 @@
+
+
+
+
+
+
+ FILTER
+
+
+
+
+
+ SORT
+
+
+
+
+
+
+
+
+
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 @@
-
-
-
- mdi-filter-variant
-
-
-
-
+
@@ -29,26 +21,14 @@
-
-
-
-
-
-
- mdi-close
-
- Clear
-
-
-
+
+
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 @@
+
+
+
+
+
+ mdi-chevron-up
+
+
+ mdi-chevron-down
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
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 @@
-
-
-
-
- mdi-sort-variant
-
-
-
-
-
-
-
- mdi-chevron-up
-
-
- mdi-chevron-down
-
-
- {{ item.name }}
-
-
-
-
-
-
-
-
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 @@
-
+
@@ -125,7 +125,7 @@
-
+