From c0633ad40939f22bf1bb8926ae576cf1c1ecafcc Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Thu, 2 Feb 2017 09:06:15 +1300 Subject: [PATCH] Context menu on local material; Passes full item object; Shift + click when nothing selected --- src/js/components/ContextMenu.js | 5 +++-- src/js/components/List.js | 10 +++------ src/js/components/TrackList.js | 22 ++++++++++++++----- src/js/views/Album.js | 2 +- src/js/views/library/LibraryAlbums.js | 16 +++++++++----- src/js/views/library/LibraryArtists.js | 19 ++++++++++------ src/js/views/library/LibraryLocalArtists.js | 19 +++++++++++++++- src/js/views/library/LibraryLocalDirectory.js | 6 +++-- src/js/views/library/LibraryPlaylists.js | 21 ++++++++++++++++-- 9 files changed, 86 insertions(+), 34 deletions(-) diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js index 38c648e4..20cb8673 100755 --- a/src/js/components/ContextMenu.js +++ b/src/js/components/ContextMenu.js @@ -137,14 +137,15 @@ class ContextMenu extends React.Component{ { handleClick: 'playURIs', label: 'Play' }, { handleClick: 'playURIsNext', label: 'Play next' }, { handleClick: 'addToQueue', label: 'Add to queue' }, + // { handleClick: 'toggleFollow', label: 'Follow/unfollow' }, TODO { handleClick: 'copyURIs', label: 'Copy URI' } ] break case 'artist': var items = [ + //{ handleClick: 'toggleFollow', label: 'Follow/unfollow' }, TODO { handleClick: 'startRadio', label: 'Start radio' }, - { handleClick: 'toggleFollow', label: 'Follow/unfollow' }, { handleClick: 'copyURIs', label: 'Copy URI' } ] break @@ -152,7 +153,7 @@ class ContextMenu extends React.Component{ case 'playlist': var items = [ { handleClick: 'playURIs', label: 'Play' }, - { handleClick: 'toggleFollow', label: 'Follow/unfollow' }, + // { handleClick: 'toggleFollow', label: 'Follow/unfollow' }, TODO { handleClick: 'copyURIs', label: 'Copy URI' } ] break diff --git a/src/js/components/List.js b/src/js/components/List.js index 61c9ffec..e33959b2 100755 --- a/src/js/components/List.js +++ b/src/js/components/List.js @@ -26,14 +26,10 @@ class List extends React.Component{ } handleContextMenu(e,item){ - e.preventDefault() - var data = { - e: e, - context: helpers.uriType(item.uri), - uris: [item.uri], - item: item + if (this.props.handleContextMenu){ + e.preventDefault() + this.props.handleContextMenu(e,item) } - this.props.uiActions.showContextMenu(data) } renderHeader(){ diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index 8200f531..c5cdbad8 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -153,12 +153,18 @@ class TrackList extends React.Component{ } } - toggleTrackSelections(e, index){ + toggleTrackSelections(e,index){ var tracks = this.state.tracks + var lastSelectedTrack = this.state.lastSelectedTrack if( e.ctrlKey ){ - tracks[index].selected = !tracks[index].selected + if (tracks[index].selected){ + tracks[index].selected = false + } else { + tracks[index].selected = true + lastSelectedTrack = index + } }else if( e.shiftKey ){ @@ -170,8 +176,11 @@ class TrackList extends React.Component{ var end = this.state.lastSelectedTrack } - for( var i = start; i <= end; i++ ){ - tracks[i].selected = true + if (start !== false && end !== false){ + for( var i = start; i <= end; i++ ){ + tracks[i].selected = true + lastSelectedTrack = index + } } }else{ @@ -180,10 +189,11 @@ class TrackList extends React.Component{ tracks[i].selected = false } - tracks[index].selected = !tracks[index].selected + tracks[index].selected = true + lastSelectedTrack = index } - this.setState({ tracks: tracks, lastSelectedTrack: index }) + this.setState({ tracks: tracks, lastSelectedTrack: lastSelectedTrack }) } isRightClick(e){ diff --git a/src/js/views/Album.js b/src/js/views/Album.js index 21fea844..299af569 100755 --- a/src/js/views/Album.js +++ b/src/js/views/Album.js @@ -98,7 +98,7 @@ class Album extends React.Component{
- this.handleContextMenu(e) } /> +
diff --git a/src/js/views/library/LibraryAlbums.js b/src/js/views/library/LibraryAlbums.js index ccbcb21b..445f8497 100755 --- a/src/js/views/library/LibraryAlbums.js +++ b/src/js/views/library/LibraryAlbums.js @@ -28,10 +28,14 @@ class LibraryAlbums extends React.Component{ if (!this.props.library_albums) this.props.spotifyActions.getLibraryAlbums(); } - handleContextMenu(e,uri){ - e.preventDefault() - var data = { uris: [uri] } - this.props.uiActions.showContextMenu( e, data, 'album', 'click' ) + handleContextMenu(e,item){ + var data = { + e: e, + context: 'album', + uris: [item.uri], + item: item + } + this.props.uiActions.showContextMenu(data) } loadMore(){ @@ -83,7 +87,7 @@ class LibraryAlbums extends React.Component{ return (
this.handleContextMenu(e,uri)} + handleContextMenu={(e,item) => this.handleContextMenu(e,item)} rows={albums} columns={columns} link_prefix={global.baseURL+"album/"} /> @@ -93,7 +97,7 @@ class LibraryAlbums extends React.Component{ return (
this.handleContextMenu(e,uri)} + handleContextMenu={(e,item) => this.handleContextMenu(e,item)} albums={albums} />
) diff --git a/src/js/views/library/LibraryArtists.js b/src/js/views/library/LibraryArtists.js index 3d994b1f..a4acf322 100755 --- a/src/js/views/library/LibraryArtists.js +++ b/src/js/views/library/LibraryArtists.js @@ -21,10 +21,14 @@ class LibraryArtists extends React.Component{ super(props); } - handleContextMenu(e,uri){ - e.preventDefault() - var data = { uris: [uri] } - this.props.uiActions.showContextMenu( e, data, 'artist', 'click' ) + handleContextMenu(e,item){ + var data = { + e: e, + context: 'artist', + uris: [item.uri], + item: item + } + this.props.uiActions.showContextMenu(data) } componentDidMount(){ @@ -68,17 +72,18 @@ class LibraryArtists extends React.Component{ return (
this.handleContextMenu(e,uri)} + handleContextMenu={(e,item) => this.handleContextMenu(e,item)} rows={artists} columns={columns} - link_prefix={global.baseURL+"artist/"} show_source_icon={true} /> + link_prefix={global.baseURL+"artist/"} + show_source_icon={true} />
) }else{ return (
this.handleContextMenu(e,uri)} + handleContextMenu={(e,item) => this.handleContextMenu(e,item)} artists={artists} />
) diff --git a/src/js/views/library/LibraryLocalArtists.js b/src/js/views/library/LibraryLocalArtists.js index 09626f66..1929e079 100755 --- a/src/js/views/library/LibraryLocalArtists.js +++ b/src/js/views/library/LibraryLocalArtists.js @@ -6,6 +6,7 @@ import { bindActionCreators } from 'redux' import Header from '../../components/Header' import List from '../../components/List' +import * as uiActions from '../../services/ui/actions' import * as mopidyActions from '../../services/mopidy/actions' import * as spotifyActions from '../../services/spotify/actions' @@ -26,6 +27,16 @@ class LibraryLocalArtists extends React.Component{ } } + handleContextMenu(e,item){ + var data = { + e: e, + context: 'artist', + uris: [item.uri], + item: item + } + this.props.uiActions.showContextMenu(data) + } + loadArtists(props = this.props){ if( props.mopidy_connected && !props.local_artists ){ this.props.mopidyActions.getLibraryArtists(); @@ -47,7 +58,12 @@ class LibraryLocalArtists extends React.Component{
- + this.handleContextMenu(e,item)} + />
); @@ -71,6 +87,7 @@ const mapStateToProps = (state, ownProps) => { const mapDispatchToProps = (dispatch) => { return { + uiActions: bindActionCreators(uiActions, dispatch), mopidyActions: bindActionCreators(mopidyActions, dispatch), spotifyActions: bindActionCreators(spotifyActions, dispatch) } diff --git a/src/js/views/library/LibraryLocalDirectory.js b/src/js/views/library/LibraryLocalDirectory.js index c92d8026..1cdea81c 100755 --- a/src/js/views/library/LibraryLocalDirectory.js +++ b/src/js/views/library/LibraryLocalDirectory.js @@ -85,8 +85,10 @@ class LibraryLocalDirectory extends React.Component{
- - +
diff --git a/src/js/views/library/LibraryPlaylists.js b/src/js/views/library/LibraryPlaylists.js index 99269fbc..81aae06b 100755 --- a/src/js/views/library/LibraryPlaylists.js +++ b/src/js/views/library/LibraryPlaylists.js @@ -21,6 +21,16 @@ class LibraryPlaylists extends React.Component{ super(props); } + handleContextMenu(e,item){ + var data = { + e: e, + context: 'playlist', + uris: [item.uri], + item: item + } + this.props.uiActions.showContextMenu(data) + } + setSort(value){ var reverse = false if( this.props.sort == value ) reverse = !this.props.sort_reverse @@ -72,13 +82,20 @@ class LibraryPlaylists extends React.Component{ ] return (
- + this.handleContextMenu(e,item)} + rows={playlists} + columns={columns} + link_prefix={global.baseURL+"playlist/"} + show_source_icon={true} />
) }else{ return (
- + this.handleContextMenu(e,item)} + playlists={playlists} />
) }