import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import ErrorMessage from '../components/ErrorMessage'; import Thumbnail from '../components/Thumbnail'; import PlaylistGrid from '../components/PlaylistGrid'; import FollowButton from '../components/Fields/FollowButton'; import LazyLoadListener from '../components/LazyLoadListener'; import Parallax from '../components/Parallax'; import NiceNumber from '../components/NiceNumber'; import Loader from '../components/Loader'; 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 spotifyActions from '../services/spotify/actions'; class User extends React.Component { constructor(props) { super(props); } componentDidMount() { this.setWindowTitle(); this.props.coreActions.loadUser(this.props.uri); this.props.coreActions.loadUserPlaylists(this.props.uri); } componentWillReceiveProps(nextProps) { if (nextProps.uri != this.props.uri) { this.props.coreActions.loadUser(nextProps.uri); this.props.coreActions.loadUserPlaylists(this.props.uri); } if (!this.props.user && nextProps.user) { this.setWindowTitle(nextProps.user); } } setWindowTitle(user = this.props.user) { if (user) { this.props.uiActions.setWindowTitle(`${user.name} (user)`); } else { this.props.uiActions.setWindowTitle('User'); } } loadMore() { this.props.spotifyActions.getMore( this.props.user.playlists_more, { parent_type: 'user', parent_key: this.props.uri, records_type: 'playlist', }, ); } isMe() { const userid = helpers.getFromUri('userid', this.props.uri); return (this.props.me && this.props.me.id && this.props.me.id == userid); } render() { const user_id = helpers.getFromUri('userid', this.props.uri); if (!this.props.user) { if (helpers.isLoading(this.props.load_queue, [`spotify_users/${user_id}`, `spotify_users/${user_id}/playlists/?`])) { return } return (

Could not find user with URI " {encodeURIComponent(this.props.uri)} "

); } const user = helpers.collate(this.props.user, { playlists: this.props.playlists }); if (user && user.images) { var image = user.images.huge; } else { var image = null; } return (

{user.name}

    {!this.props.slim_mode ?
  • : null} {user.playlists_total ? (
  • {' '} playlists
  • ) : null} {user.followers ? (
  • {' '} followers
  • ) : null} {this.isMe() ?
  • You
  • : null}

Playlists

this.loadMore()} />
); } } const mapStateToProps = (state, ownProps) => { const uri = decodeURIComponent(ownProps.match.params.uri); return { uri, me: state.spotify.me, load_queue: state.ui.load_queue, spotify_authorized: state.spotify.authorization, playlists: state.core.playlists, user: (state.core.users[uri] !== undefined ? state.core.users[uri] : false), }; }; const mapDispatchToProps = (dispatch) => ({ coreActions: bindActionCreators(coreActions, dispatch), uiActions: bindActionCreators(uiActions, dispatch), spotifyActions: bindActionCreators(spotifyActions, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(User);