From 82744bf193f146412d5d272f36f87e59aff5d938 Mon Sep 17 00:00:00 2001 From: Renon <renon@disroot.org> Date: Tue, 12 Nov 2019 15:51:45 +0100 Subject: [PATCH] Resolve "Option to remember our display settings " --- changes/changelog.d/391.enhancement | 1 + .../changelog.d}/943.bugfix | 0 front/src/components/library/Albums.vue | 6 ---- front/src/components/library/Artists.vue | 6 ---- front/src/components/library/Radios.vue | 8 +---- front/src/components/mixins/Ordering.vue | 35 +++++++++++++++++++ front/src/store/index.js | 2 +- front/src/store/ui.js | 35 +++++++++++++++++-- front/src/views/playlists/List.vue | 6 ---- 9 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 changes/changelog.d/391.enhancement rename {front/src/components/playlists => changes/changelog.d}/943.bugfix (100%) diff --git a/changes/changelog.d/391.enhancement b/changes/changelog.d/391.enhancement new file mode 100644 index 0000000000..28c19ecf3e --- /dev/null +++ b/changes/changelog.d/391.enhancement @@ -0,0 +1 @@ +Remember display settings in Album, Artist, Radio and Playlist views (#391) diff --git a/front/src/components/playlists/943.bugfix b/changes/changelog.d/943.bugfix similarity index 100% rename from front/src/components/playlists/943.bugfix rename to changes/changelog.d/943.bugfix diff --git a/front/src/components/library/Albums.vue b/front/src/components/library/Albums.vue index 07e20b22e9..5ce51be1be 100644 --- a/front/src/components/library/Albums.vue +++ b/front/src/components/library/Albums.vue @@ -119,18 +119,12 @@ export default { TagsSelector, }, data() { - let defaultOrdering = this.getOrderingFromString( - this.defaultOrdering || "-creation_date" - ) return { isLoading: true, result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }), - paginateBy: parseInt(this.defaultPaginateBy || 25), - orderingDirection: defaultOrdering.direction || "+", - ordering: defaultOrdering.field, orderingOptions: [["creation_date", "creation_date"], ["title", "album_title"]] } }, diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue index a56abac142..f0dcd8a116 100644 --- a/front/src/components/library/Artists.vue +++ b/front/src/components/library/Artists.vue @@ -107,18 +107,12 @@ export default { TagsSelector, }, data() { - let defaultOrdering = this.getOrderingFromString( - this.defaultOrdering || "-creation_date" - ) return { isLoading: true, result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, tags: (this.defaultTags || []).filter((t) => { return t.length > 0 }), - paginateBy: parseInt(this.defaultPaginateBy || 30), - orderingDirection: defaultOrdering.direction || "+", - ordering: defaultOrdering.field, orderingOptions: [["creation_date", "creation_date"], ["name", "name"]] } }, diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue index a646321bc9..b03801d807 100644 --- a/front/src/components/library/Radios.vue +++ b/front/src/components/library/Radios.vue @@ -93,7 +93,7 @@ v-for="radio in result.results" :key="radio.id" :custom-radio="radio"></radio-card> - </div> + </div> </div> <div class="ui center aligned basic segment"> <pagination @@ -133,17 +133,11 @@ export default { Pagination }, data() { - let defaultOrdering = this.getOrderingFromString( - this.defaultOrdering || "-creation_date" - ) return { isLoading: true, result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, - paginateBy: parseInt(this.defaultPaginateBy || 12), - orderingDirection: defaultOrdering.direction || "+", - ordering: defaultOrdering.field, orderingOptions: [["creation_date", "creation_date"], ["name", "name"]] } }, diff --git a/front/src/components/mixins/Ordering.vue b/front/src/components/mixins/Ordering.vue index 6235fd7d04..befce8faad 100644 --- a/front/src/components/mixins/Ordering.vue +++ b/front/src/components/mixins/Ordering.vue @@ -3,6 +3,41 @@ export default { props: { defaultOrdering: {type: String, required: false} }, + computed: { + paginateBy: { + set(paginateBy) { + this.$store.commit('ui/paginateBy', { + route: this.$route.name, + value: paginateBy + }) + }, + get() { + return this.$store.state.ui.routePreferences[this.$route.name].paginateBy + } + }, + ordering: { + set(ordering) { + this.$store.commit('ui/ordering', { + route: this.$route.name, + value: ordering + }) + }, + get() { + return this.$store.state.ui.routePreferences[this.$route.name].ordering + } + }, + orderingDirection: { + set(orderingDirection) { + this.$store.commit('ui/orderingDirection', { + route: this.$route.name, + value: orderingDirection + }) + }, + get() { + return this.$store.state.ui.routePreferences[this.$route.name].orderingDirection + } + }, + }, methods: { getOrderingFromString (s) { let parts = s.split('-') diff --git a/front/src/store/index.js b/front/src/store/index.js index d94a0bcc77..e10f97b51a 100644 --- a/front/src/store/index.js +++ b/front/src/store/index.js @@ -40,7 +40,7 @@ export default new Vuex.Store({ }), createPersistedState({ key: 'ui', - paths: ['ui.currentLanguage', 'ui.selectedLanguage', 'ui.momentLocale', 'ui.theme'] + paths: ['ui.currentLanguage', 'ui.selectedLanguage', 'ui.momentLocale', 'ui.theme', 'ui.routePreferences'] }), createPersistedState({ key: 'radios', diff --git a/front/src/store/ui.js b/front/src/store/ui.js index 48795116f9..0ddd94555c 100644 --- a/front/src/store/ui.js +++ b/front/src/store/ui.js @@ -24,7 +24,29 @@ export default { 'mutation.updated': {}, 'report.created': {}, }, - pageTitle: null + pageTitle: null, + routePreferences: { + "library.albums.browse": { + paginateBy: 25, + orderingDirection: "-", + ordering: "creation_date", + }, + "library.artists.browse": { + paginateBy: 30, + orderingDirection: "-", + ordering: "creation_date", + }, + "library.radios.browse": { + paginateBy: 12, + orderingDirection: "-", + ordering: "creation_date", + }, + "library.playlists.browse": { + paginateBy: 25, + orderingDirection: "-", + ordering: "creation_date", + }, + }, }, getters: { showInstanceSupportMessage: (state, getters, rootState) => { @@ -103,7 +125,16 @@ export default { }, pageTitle: (state, value) => { state.pageTitle = value - } + }, + paginateBy: (state, {route, value}) => { + state.routePreferences[route].paginateBy = value + }, + ordering: (state, {route, value}) => { + state.routePreferences[route].ordering = value + }, + orderingDirection: (state, {route, value}) => { + state.routePreferences[route].orderingDirection = value + }, }, actions: { fetchUnreadNotifications ({commit}, payload) { diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue index 9fb53fd66c..dad029cf43 100644 --- a/front/src/views/playlists/List.vue +++ b/front/src/views/playlists/List.vue @@ -94,17 +94,11 @@ export default { Pagination }, data() { - let defaultOrdering = this.getOrderingFromString( - this.defaultOrdering || "-creation_date" - ) return { isLoading: true, result: null, page: parseInt(this.defaultPage), query: this.defaultQuery, - paginateBy: parseInt(this.defaultPaginateBy || 12), - orderingDirection: defaultOrdering.direction || "+", - ordering: defaultOrdering.field, orderingOptions: [ ["creation_date", "creation_date"], ["modification_date", "modification_date"], -- GitLab