diff --git a/src/js/locale/en.yaml b/src/js/locale/en.yaml index c28e9ebc..41e82bae 100755 --- a/src/js/locale/en.yaml +++ b/src/js/locale/en.yaml @@ -280,6 +280,7 @@ artist: disc_track: Track number name: Name album: Album + date: Date related_artists: title: Related artists about: diff --git a/src/js/util/arrays.js b/src/js/util/arrays.js index 347245aa..c955f163 100755 --- a/src/js/util/arrays.js +++ b/src/js/util/arrays.js @@ -159,11 +159,21 @@ const sortItems = (array, property, reverse = false) => { return item.album ? item.album.name : undefined; case 'user': return item.user ? item.user.id : undefined; + case 'date': + return item.album?.date || item.date || ''; default: return item[property]; } }; + // Special handling for date sort: sort by date first, then track number + if (property === 'date') { + return orderBy(array, [ + item => item.album?.date || item.date || '', + item => item.track_number || 0, + ], [reverse ? 'desc' : 'asc', 'asc']); + } + return orderBy(array, sorter, (reverse ? 'desc' : 'asc')); }; diff --git a/src/js/views/Artist/Tracks.js b/src/js/views/Artist/Tracks.js index 58bf8aed..676b4f16 100644 --- a/src/js/views/Artist/Tracks.js +++ b/src/js/views/Artist/Tracks.js @@ -55,6 +55,10 @@ export default ({ artist }) => { value: 'album', label: i18n('artist.tracks.sort.album'), }, + { + value: 'date', + label: i18n('artist.tracks.sort.date'), + }, ]; return (