Update the movie reducer from switch to map

This commit is contained in:
Grégoire Delattre 2017-06-02 20:53:51 +02:00
parent 77625b382f
commit b61be889dd

View File

@ -1,4 +1,4 @@
import { OrderedMap, Map, fromJS } from 'immutable' import { OrderedMap, Map, fromJS } from "immutable"
const defaultState = Map({ const defaultState = Map({
loading: false, loading: false,
@ -9,12 +9,9 @@ const defaultState = Map({
exploreOptions: Map(), exploreOptions: Map(),
}); });
export default function movieStore(state = defaultState, action) { const handlers = {
switch (action.type) { "MOVIE_LIST_FETCH_PENDING": state => state.set("loading", true),
case 'MOVIE_LIST_FETCH_PENDING': "MOVIE_LIST_FETCH_FULFILLED": (state, action) => {
return state.set('loading', true);
case 'MOVIE_LIST_FETCH_FULFILLED':
let movies = Map(); let movies = Map();
action.payload.response.data.map(function (movie) { action.payload.response.data.map(function (movie) {
movie.fetchingDetails = false; movie.fetchingDetails = false;
@ -26,38 +23,30 @@ export default function movieStore(state = defaultState, action) {
let selectedImdbId = ""; let selectedImdbId = "";
if (movies.size > 0) { if (movies.size > 0) {
// Sort by year // Sort by year
movies = movies.sort((a,b) => b.get('year') - a.get('year')); movies = movies.sort((a,b) => b.get("year") - a.get("year"));
selectedImdbId = movies.first().get('imdb_id'); selectedImdbId = movies.first().get("imdb_id");
} }
return state.delete('movies').merge(Map({ return state.delete("movies").merge(Map({
movies: movies, movies: movies,
filter: "", filter: "",
loading: false, loading: false,
selectedImdbId: selectedImdbId, selectedImdbId: selectedImdbId,
})) }))
case 'MOVIE_GET_DETAILS_PENDING': },
return state.setIn(['movies', action.payload.main.imdbId, 'fetchingDetails'], true); "MOVIE_GET_DETAILS_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingDetails"], true),
case 'MOVIE_GET_DETAILS_FULFILLED': "MOVIE_GET_DETAILS_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.response.data.imdb_id], fromJS(action.payload.response.data))
let movie = action.payload.response.data; .setIn(["movies", action.payload.response.data.imdb_id, "fetchingDetails"], false)
movie.fetchingDetails = false; .setIn(["movies", action.payload.response.data.imdb_id, "fetchingSubtitles"], false),
movie.fetchingSubtitles = false; "MOVIE_UPDATE_STORE_WISHLIST" : (state, action) => state.setIn(["movies", action.payload.imdbId, "wishlisted"], action.payload.wishlisted),
return state.setIn(['movies', movie.imdb_id], fromJS(movie)); "MOVIE_GET_EXPLORE_OPTIONS_FULFILLED" : (state, action) => state.set("exploreOptions", fromJS(action.payload.response.data)),
case 'MOVIE_UPDATE_STORE_WISHLIST': "UPDATE_LAST_MOVIE_FETCH_URL" : (state, action) => state.set("lastFetchUrl", action.payload.url),
return state.setIn(['movies', action.payload.imdbId, 'wishlisted'], action.payload.wishlisted); "MOVIE_SUBTITLES_UPDATE_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], true),
case 'MOVIE_GET_EXPLORE_OPTIONS_FULFILLED': "MOVIE_SUBTITLES_UPDATE_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], false)
return state.set('exploreOptions', fromJS(action.payload.response.data)); .setIn(["movies", action.payload.main.imdbId, "subtitles"], fromJS(action.payload.data.response)),
case 'UPDATE_LAST_MOVIE_FETCH_URL': "SELECT_MOVIE" : (state, action) => state.set("selectedImdbId", action.payload.imdbId),
return state.set('lastFetchUrl', action.payload.url); "MOVIE_UPDATE_FILTER" : (state, action) => state.set("filter", action.payload.filter),
case 'MOVIE_SUBTITLES_UPDATE_PENDING':
return state.setIn(['movies', action.payload.main.imdbId, 'fetchingSubtitles'], true);
case 'MOVIE_SUBTITLES_UPDATE_FULFILLED':
return state.setIn(['movies', action.payload.main.imdbId, 'fetchingSubtitles'], false).setIn(['movies', action.payload.main.imdbId, 'subtitles'], fromJS(action.payload.data.response));
case 'SELECT_MOVIE':
return state.set('selectedImdbId', action.payload.imdbId);
case 'MOVIE_UPDATE_FILTER':
return state.set('filter', action.payload.filter);
default:
return state
}
} }
export default (state = defaultState, action) =>
handlers[action.type] ? handlers[action.type](state, action) : state;