import React, { PropTypes } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import Link from '../components/Link';
import LazyLoadListener from '../components/LazyLoadListener'
import Header from '../components/Header'
import TrackList from '../components/TrackList'
import AlbumGrid from '../components/AlbumGrid'
import Thumbnail from '../components/Thumbnail'
import Parallax from '../components/Parallax'
import ArtistGrid from '../components/ArtistGrid'
import RelatedArtists from '../components/RelatedArtists'
import FollowButton from '../components/Fields/FollowButton'
import ContextMenuTrigger from '../components/ContextMenuTrigger'
import DropdownField from '../components/Fields/DropdownField'
import Icon from '../components/Icon'
import * as helpers from '../helpers'
import * as coreActions from '../services/core/actions'
import * as uiActions from '../services/ui/actions'
import * as mopidyActions from '../services/mopidy/actions'
import * as pusherActions from '../services/pusher/actions'
import * as lastfmActions from '../services/lastfm/actions'
import * as spotifyActions from '../services/spotify/actions'
class Artist extends React.Component{
constructor(props){
super(props)
}
componentDidMount(){
this.setWindowTitle();
this.props.coreActions.loadArtist(this.props.params.uri);
}
componentWillReceiveProps(nextProps){
if (nextProps.params.uri != this.props.params.uri){
this.props.coreActions.loadArtist(nextProps.params.uri);
} else if (!this.props.mopidy_connected && nextProps.mopidy_connected){
if (helpers.uriSource(this.props.params.uri ) != 'spotify'){
this.props.coreActions.loadArtist(nextProps.params.uri);
}
}
if (!this.props.artist && nextProps.artist){
this.setWindowTitle(nextProps.artist);
}
if (this.props.params.uri !== nextProps.params.uri && nextProps.artist){
this.setWindowTitle(nextProps.artist);
}
}
setWindowTitle(artist = this.props.artist){
if (artist){
this.props.uiActions.setWindowTitle(artist.name+" (artist)");
} else{
this.props.uiActions.setWindowTitle("Artist");
}
}
handleContextMenu(e){
var data = {
e: e,
context: 'artist',
items: [this.props.artist],
uris: [this.props.params.uri]
}
this.props.uiActions.showContextMenu(data);
}
loadMore(){
this.props.spotifyActions.getMore(
this.props.artist.albums_more,
{
parent_type: 'artist',
parent_key: this.props.params.uri,
records_type: 'album'
}
);
}
inLibrary(){
var library = helpers.uriSource(this.props.params.uri)+'_library_artists'
return (this.props[library] && this.props[library].indexOf(this.props.params.uri) > -1)
}
setSort(value){
var reverse = false
if (this.props.sort == value ) reverse = !this.props.sort_reverse
var data = {
artist_albums_sort_reverse: reverse,
artist_albums_sort: value
}
this.props.uiActions.set(data)
}
setFilter(value){
this.props.uiActions.set({artist_albums_filter: value});
}
renderSubViewMenu(){
return (
Overview
{this.props.artist.related_artists_uris ?
Related artists
: null}
About
)
}
renderBody(){
var scheme = helpers.uriSource(this.props.params.uri);
var artist = helpers.collate(
this.props.artist,
{
artists: this.props.artists,
albums: this.props.albums,
tracks: this.props.tracks
}
);
if (this.props.sort && artist.albums){
artist.albums = helpers.sortItems(artist.albums, this.props.sort, this.props.sort_reverse);
}
if (this.props.filter && artist.albums){
artist.albums = helpers.applyFilter('type', this.props.filter, artist.albums);
}
switch (this.props.params.sub_view){
case 'related-artists':
return (
)
case 'about':
var thumbnails = [];
if (artist.images && artist.images.length > 0){
for (var i = 0; i < artist.images.length; i++){
thumbnails.push(
Albums
{this.setSort(value); this.props.uiActions.hideContextMenu() }}
/>
{this.setFilter(value); this.props.uiActions.hideContextMenu() }}
/>
this.loadMore()}
/>
: null}
)
}
}
render(){
var scheme = helpers.uriSource(this.props.params.uri);
if (!this.props.artist){
if (helpers.isLoading(this.props.load_queue,['spotify_artists/'+helpers.getFromUri('artistid',this.props.params.uri), 'lastfm_method=artist.getInfo'])){
return (
)
} else {
return null;
}
}
if (this.props.artist && this.props.artist.images && this.props.artist.images.length > 0){
var image = this.props.artist.images[0].huge;
} else {
var image = null;
}
var is_spotify = (scheme == 'spotify')
if (this.props.artist.tracks_uris && this.props.artist.tracks_uris.length > 0){
var uris_to_play = this.props.artist.tracks_uris
} else {
var uris_to_play = this.props.artist.albums_uris
}
return (