From 5c49b6a859e5f4b9c045bd1edd17fa6035695c47 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Mon, 4 Dec 2017 08:43:09 +1300 Subject: [PATCH] Sorting of search results in UI (#198) --- src/js/components/Track.js | 2 +- src/js/services/mopidy/middleware.js | 4 +-- src/js/services/spotify/actions.js | 2 +- src/js/services/spotify/middleware.js | 2 +- src/js/views/Search.js | 43 +++++++++++++++++++++++++-- 5 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/js/components/Track.js b/src/js/components/Track.js index 9b56755d..112631b3 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -224,7 +224,7 @@ export default class Track extends React.Component{ ) track_columns.push( - {track.duration ? : null} + {track.duration ? : '-'} ) } diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index 4093ba8f..f42bd535 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -838,7 +838,7 @@ const MopidyMiddleware = (function(){ store.dispatch({ type: 'MOPIDY_SEARCH_RESULTS_LOADED', context: action.data.context, - results: tracks + results: helpers.formatTracks(tracks) }); } continue_process(); @@ -873,7 +873,7 @@ const MopidyMiddleware = (function(){ store.dispatch({ type: 'MOPIDY_SEARCH_RESULTS_LOADED', context: 'tracks', - results: tracks + results: helpers.formatTracks(tracks) }); } diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js index f2783b86..b85a797d 100755 --- a/src/js/services/spotify/actions.js +++ b/src/js/services/spotify/actions.js @@ -565,7 +565,7 @@ export function getSearchResults(type, query, limit = 50, offset = 0){ dispatch({ type: 'SPOTIFY_SEARCH_RESULTS_LOADED', context: 'tracks', - results: response.tracks.items, + results: helpers.formatTracks(response.tracks.items), more: response.tracks.next, }); } diff --git a/src/js/services/spotify/middleware.js b/src/js/services/spotify/middleware.js index e55496a9..4c9f5ea5 100755 --- a/src/js/services/spotify/middleware.js +++ b/src/js/services/spotify/middleware.js @@ -359,7 +359,7 @@ const SpotifyMiddleware = (function(){ store.dispatch({ type: 'SPOTIFY_SEARCH_RESULTS_LOADED', context: 'tracks', - results: action.data.tracks.items, + results: helpers.formatTracks(action.data.tracks.items), more: action.data.tracks.next }); break diff --git a/src/js/views/Search.js b/src/js/views/Search.js index 62aa0547..bb29d868 100755 --- a/src/js/views/Search.js +++ b/src/js/views/Search.js @@ -73,6 +73,17 @@ class Search extends React.Component{ //this.props.spotifyActions.getURL(this.props['spotify_'+type+'_more'], 'SPOTIFY_SEARCH_RESULTS_LOADED_MORE_'+type.toUpperCase()); } + setSort(value){ + var reverse = false + if (this.props.sort == value ) reverse = !this.props.sort_reverse + + var data = { + search_results_sort_reverse: reverse, + search_results_sort: value + } + this.props.uiActions.set(data) + } + renderResults(){ var spotify_search_enabled = (this.props.search_settings && this.props.search_settings.spotify) @@ -83,14 +94,16 @@ class Search extends React.Component{ if (this.props.spotify_search_results.artists){ artists = [...artists, ...helpers.getIndexedRecords(this.props.artists,this.props.spotify_search_results.artists)] } + artists = helpers.sortItems(artists, this.props.sort, this.props.sort_reverse); var albums = [] if (this.props.mopidy_search_results.albums){ - albums = [...albums, ...helpers.getIndexedRecords(this.props.albums,this.props.mopidy_search_results.albums)] + albums = [...albums, ...helpers.getIndexedRecords(this.props.albums,this.props.mopidy_search_results.albums)]; } if (this.props.spotify_search_results.albums){ albums = [...albums, ...helpers.getIndexedRecords(this.props.albums,this.props.spotify_search_results.albums)] - } + } + albums = helpers.sortItems(albums, this.props.sort, this.props.sort_reverse); var playlists = [] if (this.props.mopidy_search_results.playlists){ @@ -99,6 +112,7 @@ class Search extends React.Component{ if (this.props.spotify_search_results.playlists){ playlists = [...playlists, ...helpers.getIndexedRecords(this.props.playlists,this.props.spotify_search_results.playlists)] } + playlists = helpers.sortItems(playlists, this.props.sort, this.props.sort_reverse); var tracks = [] if (this.props.mopidy_search_results.tracks){ @@ -107,6 +121,7 @@ class Search extends React.Component{ if (this.props.spotify_search_results.tracks){ tracks = [...tracks, ...this.props.spotify_search_results.tracks] } + tracks = helpers.sortItems(tracks, this.props.sort, this.props.sort_reverse); switch (this.props.view){ @@ -244,8 +259,28 @@ class Search extends React.Component{ } ] + var sort_options = [ + { + value: 'name', + label: 'Name' + }, + { + value: 'artists.name', + label: 'Artist' + }, + { + value: 'duration', + label: 'Duration' + }, + { + value: 'source', + label: 'Source' + } + ] + var options = ( + {this.setSort(val); this.props.uiActions.hideContextMenu() }} /> {this.props.uiActions.set({ search_view: val }); this.props.uiActions.hideContextMenu() }} />