From ddcdc580439603259847a001537e505185a88bb4 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Tue, 15 Nov 2016 13:34:55 +1300 Subject: [PATCH] Selecting tracks where multiple instances on one playlist --- src/js/components/TrackList.js | 46 +++++++++++++--------- src/js/services/localstorage/middleware.js | 2 +- src/js/views/Playlist.js | 2 +- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index ac04f842..a1634de6 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -14,7 +14,7 @@ class TrackList extends React.Component{ super(props); this.state = { - tracks: this.props.tracks, + tracks: this.keyifyTracks(this.props.tracks), lastSelectedTrack: false } @@ -29,6 +29,10 @@ class TrackList extends React.Component{ window.removeEventListener("keyup", this.handleKeyUp, false); } + componentWillReceiveProps( nextProps ){ + this.setState({ tracks: this.keyifyTracks(nextProps.tracks) }); + } + handleKeyUp(e){ if( this.selectedTracks().length <= 0 ) return; @@ -44,51 +48,48 @@ class TrackList extends React.Component{ } } - componentWillReceiveProps( nextProps ){ - this.setState({ tracks: nextProps.tracks }); - } - handleClick( e, index ){ - if( this.props.context_menu.show ) this.props.uiActions.hideContextMenu(); + if( this.props.context_menu.show ) this.props.uiActions.hideContextMenu() - var tracks = this.state.tracks; + var tracks = this.state.tracks if( e.ctrlKey ){ - tracks[index].selected = !tracks[index].selected; + tracks[index].selected = !tracks[index].selected }else if( e.shiftKey ){ if( this.state.lastSelectedTrack < index ){ - var start = this.state.lastSelectedTrack; - var end = index; + var start = this.state.lastSelectedTrack + var end = index }else{ - var start = index; - var end = this.state.lastSelectedTrack; + var start = index + var end = this.state.lastSelectedTrack } for( var i = start; i <= end; i++ ){ - tracks[i].selected = true; + tracks[i].selected = true } }else{ for( var i = 0; i < tracks.length; i++ ){ - tracks[i].selected = false; + tracks[i].selected = false } - tracks[index].selected = !tracks[index].selected; + + tracks[index].selected = !tracks[index].selected } - this.setState({ tracks: tracks, lastSelectedTrack: index }); + this.setState({ tracks: tracks, lastSelectedTrack: index }) } handleDoubleClick(e, index){ - if( this.props.context_menu.show ) this.props.uiActions.hideContextMenu(); + if( this.props.context_menu.show ) this.props.uiActions.hideContextMenu() this.playTracks() } handleDragStart(e, index){ - this.props.uiActions.dragStart( e, 'tltracks', this.selectedTracks() ) + this.props.uiActions.dragStart( e, this.props.context, this.selectedTracks() ) } handleContextMenu(e, index){ @@ -100,6 +101,13 @@ class TrackList extends React.Component{ this.props.uiActions.showContextMenu( e, this.props.context, data ) } + keyifyTracks( tracks ){ + for( var i = 0; i < tracks.length; i++ ){ + tracks[i] = Object.assign({}, tracks[i], { key: i+'_'+tracks[i].uri }) + } + return tracks + } + selectedTracks(){ function isSelected( track ){ return ( typeof(track.selected) !== 'undefined' && track.selected ); @@ -161,7 +169,7 @@ class TrackList extends React.Component{ (track, index) => { return self.handleDoubleClick(e, index)} handleClick={ e => self.handleClick(e, index)} diff --git a/src/js/services/localstorage/middleware.js b/src/js/services/localstorage/middleware.js index 71932e75..db626418 100755 --- a/src/js/services/localstorage/middleware.js +++ b/src/js/services/localstorage/middleware.js @@ -12,7 +12,7 @@ const localstorageMiddleware = (function(){ // append our state to a global variable. This gives us access to debug the store at any point window._store = store - console.log(action) + //console.log(action) switch( action.type ){ diff --git a/src/js/views/Playlist.js b/src/js/views/Playlist.js index 692175f0..8090ff0e 100755 --- a/src/js/views/Playlist.js +++ b/src/js/views/Playlist.js @@ -124,7 +124,7 @@ class Playlist extends React.Component{
  • { this.props.playlist.tracks_total } tracks,
  • { this.props.playlist.last_modified ?
  • Updated ago
  • : null } { this.props.playlist.followers ?
  • {this.props.playlist.followers.total.toLocaleString()} followers
  • : null } - { scheme == 'spotify' ?
  • By {this.props.playlist.owner.id}  { !this.props.playlist.public ? : null }
  • : null } + { scheme == 'spotify' && this.props.playlist.owner ?
  • By {this.props.playlist.owner.id}  { !this.props.playlist.public ? : null }
  • : null } { scheme == 'spotify' ?
  • Spotify playlist
  • : null } { scheme == 'm3u' ?
  • Local playlist
  • : null }