From 5d1598e88784ff11c05ca638a0507ca0804d74b4 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Wed, 14 Dec 2016 08:51:11 +1300 Subject: [PATCH] Playlists sorting; Default to by name --- src/js/bootstrap.js | 3 ++- src/js/helpers.js | 22 ++++++++++++++++------ src/js/services/ui/reducer.js | 1 + src/js/views/library/LibraryPlaylists.js | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/js/bootstrap.js b/src/js/bootstrap.js index 6c9e7c61..a3946952 100755 --- a/src/js/bootstrap.js +++ b/src/js/bootstrap.js @@ -50,7 +50,8 @@ var initialState = { spotify: { connected: false, country: 'NZ', - locale: 'en_NZ' + locale: 'en_NZ', + me: false }, ui: { context_menu: { diff --git a/src/js/helpers.js b/src/js/helpers.js index 5307132d..f1b4d162 100755 --- a/src/js/helpers.js +++ b/src/js/helpers.js @@ -255,24 +255,33 @@ export let createRange = function (indexes){ * @return array **/ export let sortItems = function (array, property, reverse = false){ + function compare(a,b) { var a_value = a var a_property_split = property.split('.') for( var i = 0; i < a_property_split.length; i++ ){ - if( typeof(a_value[a_property_split[i]]) === 'undefined' ) return -1 - a_value = a_value[a_property_split[i]] + if( typeof(a_value[a_property_split[i]]) === 'undefined' ){ + a_value = false + }else{ + a_value = a_value[a_property_split[i]] + } } var b_value = b var b_property_split = property.split('.') for( var i = 0; i < b_property_split.length; i++ ){ - if( typeof(b_value[b_property_split[i]]) === 'undefined' ) return -1 - b_value = b_value[b_property_split[i]] + if( typeof(b_value[b_property_split[i]]) === 'undefined' ){ + b_value = false + }else{ + b_value = b_value[b_property_split[i]] + } } if( typeof(a_value) === 'boolean'){ - return a_value + if( a_value && !b_value ) return -1 + if( !a_value && b_value ) return 1 + return 0 }else if( typeof(a_value) === 'string'){ if(a_value.toLowerCase() > b_value.toLowerCase()) return 1 @@ -280,7 +289,8 @@ export let sortItems = function (array, property, reverse = false){ }else{ if( parseInt(a_value) > parseInt(b_value) ) return 1 - return -1 + if( parseInt(a_value) < parseInt(b_value) ) return -1 + return 0 } } diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js index 3b6d11c6..a7af652d 100755 --- a/src/js/services/ui/reducer.js +++ b/src/js/services/ui/reducer.js @@ -312,6 +312,7 @@ export default function reducer(ui = {}, action){ if( !action.data ) return ui var playlists = [...ui.playlists, ...action.data] playlists = helpers.mergeDuplicates(playlists, 'uri') + helpers.sortItems(playlists, 'name') return Object.assign({}, ui, { playlists: playlists }); diff --git a/src/js/views/library/LibraryPlaylists.js b/src/js/views/library/LibraryPlaylists.js index 589b42e8..dd9da7fd 100755 --- a/src/js/views/library/LibraryPlaylists.js +++ b/src/js/views/library/LibraryPlaylists.js @@ -35,7 +35,7 @@ class LibraryPlaylists extends React.Component{ renderView(){ if( !this.props.playlists ) return null - var playlists = this.props.playlists + var playlists = Object.assign([], this.props.playlists) if( this.props.sort ){ playlists = helpers.sortItems(playlists, this.props.sort, this.props.sort_reverse) }