Loading album via actions + middleware

This commit is contained in:
James Barnsley
2016-10-16 13:28:21 +13:00
parent 9fddcc9948
commit f738766898
3 changed files with 27 additions and 12 deletions

View File

@ -4,27 +4,23 @@ import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import TrackList from './TrackList'
import * as albumActions from '../actions/albumActions'
import * as spotifyActions from '../services/spotify/actions'
class Album extends React.Component{
constructor(props) {
super(props);
this.state = {
album: false
}
}
// on render
componentDidMount(){
this.loadAlbum( this.props.params.uri );
this.props.spotifyActions.loadAlbum( this.props.params.uri );
}
// when props changed
componentWillReceiveProps( nextProps ){
if( nextProps.params.uri != this.props.params.uri ){
this.loadAlbum( nextProps.params.uri );
this.props.spotifyActions.loadAlbum( nextProps.params.uri );
}
}
@ -44,11 +40,11 @@ class Album extends React.Component{
}
renderAlbum(){
if( this.state.album ){
if( this.props.spotify.album ){
return (
<div>
<h3>{ this.state.album.name }</h3>
<TrackList tracks={this.state.album.tracks.items} />
<h3>{ this.props.spotify.album.name }</h3>
<TrackList tracks={this.props.spotify.album.tracks.items} />
</div>
);
}
@ -78,7 +74,7 @@ const mapStateToProps = (state, ownProps) => {
const mapDispatchToProps = (dispatch) => {
return {
albumActions: bindActionCreators(albumActions, dispatch)
spotifyActions: bindActionCreators(spotifyActions, dispatch)
}
}

View File

@ -4,9 +4,25 @@ import actions from './actions'
const SpotifyMiddleware = (function(){
return store => next => action => {
switch(action.type) {
case 'SPOTIFY_LOAD_ALBUM':
// clear the current album
store.dispatch({ type: 'SPOTIFY_ALBUM_LOADED', data: false })
var id = action.uri.replace('spotify:album:','');
$.ajax({
method: 'GET',
cache: true,
url: 'https://api.spotify.com/v1/albums/'+id,
success: function(album){
store.dispatch({ type: 'SPOTIFY_ALBUM_LOADED', data: album })
}
});
break;
case 'SPOTIFY_CONNECT':
console.log('Spotify wants to connect')

View File

@ -14,6 +14,9 @@ export default function reducer(spotify = {}, action){
case 'SPOTIFY_DISCONNECTED':
return Object.assign({}, spotify, { connected: false, connecting: false });
case 'SPOTIFY_ALBUM_LOADED':
return Object.assign({}, spotify, { album: action.data });
default:
return spotify
}