From b61be889dd6c281a8b6e14ac2dd8a96621266129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Fri, 2 Jun 2017 20:53:51 +0200 Subject: [PATCH] Update the movie reducer from switch to map --- src/public/js/reducers/movies.js | 89 ++++++++++++++------------------ 1 file changed, 39 insertions(+), 50 deletions(-) diff --git a/src/public/js/reducers/movies.js b/src/public/js/reducers/movies.js index 79b3a60..fea2169 100644 --- a/src/public/js/reducers/movies.js +++ b/src/public/js/reducers/movies.js @@ -1,4 +1,4 @@ -import { OrderedMap, Map, fromJS } from 'immutable' +import { OrderedMap, Map, fromJS } from "immutable" const defaultState = Map({ loading: false, @@ -9,55 +9,44 @@ const defaultState = Map({ exploreOptions: Map(), }); -export default function movieStore(state = defaultState, action) { - switch (action.type) { - case 'MOVIE_LIST_FETCH_PENDING': - return state.set('loading', true); - case 'MOVIE_LIST_FETCH_FULFILLED': - - let movies = Map(); - action.payload.response.data.map(function (movie) { - movie.fetchingDetails = false; - movie.fetchingSubtitles = false; - movies = movies.set(movie.imdb_id, fromJS(movie)); - }) - - // Select the first movie if the list is not empty - let selectedImdbId = ""; - if (movies.size > 0) { - // Sort by year - movies = movies.sort((a,b) => b.get('year') - a.get('year')); - selectedImdbId = movies.first().get('imdb_id'); - } - - return state.delete('movies').merge(Map({ - movies: movies, - filter: "", - loading: false, - selectedImdbId: selectedImdbId, - })) - case 'MOVIE_GET_DETAILS_PENDING': - return state.setIn(['movies', action.payload.main.imdbId, 'fetchingDetails'], true); - case 'MOVIE_GET_DETAILS_FULFILLED': - let movie = action.payload.response.data; +const handlers = { + "MOVIE_LIST_FETCH_PENDING": state => state.set("loading", true), + "MOVIE_LIST_FETCH_FULFILLED": (state, action) => { + let movies = Map(); + action.payload.response.data.map(function (movie) { movie.fetchingDetails = false; movie.fetchingSubtitles = false; - return state.setIn(['movies', movie.imdb_id], fromJS(movie)); - case 'MOVIE_UPDATE_STORE_WISHLIST': - return state.setIn(['movies', action.payload.imdbId, 'wishlisted'], action.payload.wishlisted); - case 'MOVIE_GET_EXPLORE_OPTIONS_FULFILLED': - return state.set('exploreOptions', fromJS(action.payload.response.data)); - case 'UPDATE_LAST_MOVIE_FETCH_URL': - return state.set('lastFetchUrl', action.payload.url); - 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 - } + movies = movies.set(movie.imdb_id, fromJS(movie)); + }) + + // Select the first movie if the list is not empty + let selectedImdbId = ""; + if (movies.size > 0) { + // Sort by year + movies = movies.sort((a,b) => b.get("year") - a.get("year")); + selectedImdbId = movies.first().get("imdb_id"); + } + + return state.delete("movies").merge(Map({ + movies: movies, + filter: "", + loading: false, + selectedImdbId: selectedImdbId, + })) + }, + "MOVIE_GET_DETAILS_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingDetails"], true), + "MOVIE_GET_DETAILS_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.response.data.imdb_id], fromJS(action.payload.response.data)) + .setIn(["movies", action.payload.response.data.imdb_id, "fetchingDetails"], false) + .setIn(["movies", action.payload.response.data.imdb_id, "fetchingSubtitles"], false), + "MOVIE_UPDATE_STORE_WISHLIST" : (state, action) => state.setIn(["movies", action.payload.imdbId, "wishlisted"], action.payload.wishlisted), + "MOVIE_GET_EXPLORE_OPTIONS_FULFILLED" : (state, action) => state.set("exploreOptions", fromJS(action.payload.response.data)), + "UPDATE_LAST_MOVIE_FETCH_URL" : (state, action) => state.set("lastFetchUrl", action.payload.url), + "MOVIE_SUBTITLES_UPDATE_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], true), + "MOVIE_SUBTITLES_UPDATE_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], false) + .setIn(["movies", action.payload.main.imdbId, "subtitles"], fromJS(action.payload.data.response)), + "SELECT_MOVIE" : (state, action) => state.set("selectedImdbId", action.payload.imdbId), + "MOVIE_UPDATE_FILTER" : (state, action) => state.set("filter", action.payload.filter), } + +export default (state = defaultState, action) => + handlers[action.type] ? handlers[action.type](state, action) : state;