diff --git a/web-src/src/lib/Albums.js b/web-src/src/lib/Albums.js index a0b38c4b..006fa4d7 100644 --- a/web-src/src/lib/Albums.js +++ b/web-src/src/lib/Albums.js @@ -21,6 +21,8 @@ export default class Albums { return album.time_added.substring(0, 4) } else if (this.options.sort === 'Recently released') { return album.date_released ? album.date_released.substring(0, 4) : '0000' + } else if (this.options.sort === 'Release date') { + return album.date_released ? album.date_released.substring(0, 4) : '0000' } return album.name_sort.charAt(0).toUpperCase() } @@ -57,6 +59,16 @@ export default class Albums { } return b.date_released.localeCompare(a.date_released) }) + } else if (this.options.sort === 'Release date') { + albumsSorted = [...albumsSorted].sort((a, b) => { + if (!a.date_released) { + return -1 + } + if (!b.date_released) { + return 1 + } + return a.date_released.localeCompare(b.date_released) + }) } this.sortedAndFiltered = albumsSorted } diff --git a/web-src/src/pages/PageArtist.vue b/web-src/src/pages/PageArtist.vue index 8056fce7..d048d58b 100644 --- a/web-src/src/pages/PageArtist.vue +++ b/web-src/src/pages/PageArtist.vue @@ -1,5 +1,13 @@ @@ -26,7 +34,10 @@ import { LoadDataBeforeEnterMixin } from './mixin' import ContentWithHeading from '@/templates/ContentWithHeading' import ListAlbums from '@/components/ListAlbums' import ModalDialogArtist from '@/components/ModalDialogArtist' +import DropdownMenu from '@/components/DropdownMenu' import webapi from '@/webapi' +import * as types from '@/store/mutation_types' +import Albums from '@/lib/Albums' const artistData = { load: function (to) { @@ -45,17 +56,36 @@ const artistData = { export default { name: 'PageArtist', mixins: [LoadDataBeforeEnterMixin(artistData)], - components: { ContentWithHeading, ListAlbums, ModalDialogArtist }, + components: { ContentWithHeading, ListAlbums, ModalDialogArtist, DropdownMenu }, data () { return { artist: {}, - albums: {}, + albums: { items: [] }, + sort_options: ['Name', 'Release date'], show_artist_details_modal: false } }, + computed: { + albums_list () { + return new Albums(this.albums.items, { + sort: this.sort, + group: false + }) + }, + + sort: { + get () { + return this.$store.state.artist_albums_sort + }, + set (value) { + this.$store.commit(types.ARTIST_ALBUMS_SORT, value) + } + } + }, + methods: { open_tracks: function () { this.$router.push({ path: '/music/artists/' + this.artist.id + '/tracks' }) diff --git a/web-src/src/router/index.js b/web-src/src/router/index.js index b7568b35..80e19d54 100644 --- a/web-src/src/router/index.js +++ b/web-src/src/router/index.js @@ -90,7 +90,7 @@ export const router = new VueRouter({ path: '/music/artists/:artist_id', name: 'Artist', component: PageArtist, - meta: { show_progress: true } + meta: { show_progress: true, has_index: true } }, { path: '/music/artists/:artist_id/tracks', diff --git a/web-src/src/store/index.js b/web-src/src/store/index.js index 9bfb8bab..f46fb444 100644 --- a/web-src/src/store/index.js +++ b/web-src/src/store/index.js @@ -55,6 +55,7 @@ export default new Vuex.Store({ hide_singles: false, hide_spotify: false, artists_sort: 'Name', + artist_albums_sort: 'Name', albums_sort: 'Name', show_only_next_items: false, show_burger_menu: false, @@ -192,6 +193,9 @@ export default new Vuex.Store({ [types.ARTISTS_SORT] (state, sort) { state.artists_sort = sort }, + [types.ARTIST_ALBUMS_SORT] (state, sort) { + state.artist_albums_sort = sort + }, [types.ALBUMS_SORT] (state, sort) { state.albums_sort = sort }, diff --git a/web-src/src/store/mutation_types.js b/web-src/src/store/mutation_types.js index f3b2beb3..3cb8e822 100644 --- a/web-src/src/store/mutation_types.js +++ b/web-src/src/store/mutation_types.js @@ -21,6 +21,7 @@ export const ADD_RECENT_SEARCH = 'ADD_RECENT_SEARCH' export const HIDE_SINGLES = 'HIDE_SINGLES' export const HIDE_SPOTIFY = 'HIDE_SPOTIFY' export const ARTISTS_SORT = 'ARTISTS_SORT' +export const ARTIST_ALBUMS_SORT = 'ARTIST_ALBUMS_SORT' export const ALBUMS_SORT = 'ALBUMS_SORT' export const SHOW_ONLY_NEXT_ITEMS = 'SHOW_ONLY_NEXT_ITEMS' export const SHOW_BURGER_MENU = 'SHOW_BURGER_MENU' diff --git a/web-src/src/templates/ContentWithHeading.vue b/web-src/src/templates/ContentWithHeading.vue index 35090f45..4211694e 100644 --- a/web-src/src/templates/ContentWithHeading.vue +++ b/web-src/src/templates/ContentWithHeading.vue @@ -4,7 +4,7 @@
-
+