Add async action to get the movies

This commit is contained in:
Grégoire Delattre 2016-11-16 15:54:18 +01:00
parent 544d4c8239
commit 7dc53ca531
3 changed files with 39 additions and 19 deletions

View File

@ -9,14 +9,6 @@ export function selectMovie(index) {
} }
} }
export const ADD_MOVIES = 'ADD_MOVIES'
export function addMovies(movies) {
return {
type: ADD_MOVIES,
movies
}
}
export const IS_USER_LOGGED_IN = 'IS_USER_LOGGED_IN' export const IS_USER_LOGGED_IN = 'IS_USER_LOGGED_IN'
export function isUserLoggedIn() { export function isUserLoggedIn() {
return { return {
@ -80,3 +72,35 @@ export function loginUser(username, password) {
}) })
} }
} }
export const MOVIE_LIST_FETCH_FULFILLED = 'MOVIE_LIST_FETCH_FULFILLED',
MOVIE_LIST_FETCH_PENDING = 'MOVIE_LIST_FETCH_PENDING';
export function fetchMovies() {
const token = localStorage.getItem('token');
const header = 'Bearer ' + token;
return function(dispatch) {
dispatch({
type: MOVIE_LIST_FETCH_PENDING,
})
axios.get('/movies/explore/popular', {
headers: { 'Authorization': header },
})
.then(response => {
if (response.data && response.data.type && response.data.type === 'error')
{
dispatch({
type: ADD_ERROR,
payload: {
message: response.data.message,
}
})
}
dispatch({
type: MOVIE_LIST_FETCH_FULFILLED,
payload: response,
})
}).catch(error => {
console.log(error)
})
}
}

View File

@ -56,14 +56,8 @@ function MovieDetails(props) {
} }
export default class MovieList extends React.Component { export default class MovieList extends React.Component {
componentDidMount() { componentWillMount() {
var _this = this; this.props.fetchMovies();
this.serverRequest =
axios
.get("/movies/explore/popular")
.then(function(result) {
_this.props.addMovies(result.data.Data.movies)
})
} }
render() { render() {
const movies = this.props.movieStore.movies; const movies = this.props.movieStore.movies;

View File

@ -1,4 +1,4 @@
import { ADD_MOVIES, SELECT_MOVIE } from '../actions/actionCreators' import { SELECT_MOVIE, MOVIE_LIST_FETCH_FULFILLED, MOVIE_LIST_FETCH_PENDING } from '../actions/actionCreators'
const defaultState = { const defaultState = {
movies: [], movies: [],
@ -7,10 +7,12 @@ const defaultState = {
export default function movieStore(state = defaultState, action) { export default function movieStore(state = defaultState, action) {
switch (action.type) { switch (action.type) {
case ADD_MOVIES: case MOVIE_LIST_FETCH_FULFILLED:
return Object.assign({}, state, { return Object.assign({}, state, {
movies: action.movies, movies: action.payload.data.Data.movies,
}) })
case MOVIE_LIST_FETCH_PENDING:
return state
case SELECT_MOVIE: case SELECT_MOVIE:
return Object.assign({}, state, { return Object.assign({}, state, {
selectedMovieIndex: action.index, selectedMovieIndex: action.index,