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 @@
+
+
+
{{ artist.name }}
@@ -15,7 +23,7 @@
{{ artist.album_count }} albums | {{ artist.track_count }} tracks
-
+
@@ -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 @@