From d144d0a98261fbb2246264f91b89ae7fe9ad31cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Fri, 2 Jun 2017 21:12:20 +0200 Subject: [PATCH] Update the shows reducer from switch to map --- src/public/js/reducers/shows.js | 110 +++++++++++++++----------------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/src/public/js/reducers/shows.js b/src/public/js/reducers/shows.js index ba3a52f..9c38e80 100644 --- a/src/public/js/reducers/shows.js +++ b/src/public/js/reducers/shows.js @@ -1,4 +1,4 @@ -import { OrderedMap, Map, fromJS } from 'immutable' +import { OrderedMap, Map, fromJS } from "immutable" const defaultState = Map({ loading: false, @@ -9,63 +9,59 @@ const defaultState = Map({ exploreOptions: Map(), }); -export default function showsStore(state = defaultState, action) { - switch (action.type) { - case 'SHOW_LIST_FETCH_PENDING': - return state.set('loading', true); - case 'SHOW_LIST_FETCH_FULFILLED': - let shows = Map(); - action.payload.response.data.map(function (show) { - show.fetchingDetails = false; - show.fetchingSubtitles = false; - shows = shows.set(show.imdb_id, fromJS(show)); - }) - - let selectedImdbId = ""; - if (shows.size > 0) { - // Sort by year - shows = shows.sort((a,b) => b.get('year') - a.get('year')); - selectedImdbId = shows.first().get('imdb_id'); - } - - return state.delete('shows').merge(Map({ - shows: shows, - filter: "", - loading: false, - selectedImdbId: selectedImdbId, - })) - case 'SHOW_GET_DETAILS_PENDING': - return state.setIn(['shows', action.payload.main.imdbId, 'fetchingDetails'], true); - case 'SHOW_GET_DETAILS_FULFILLED': - let show = action.payload.response.data; +const handlers = { + "SHOW_LIST_FETCH_PENDING": state => state.set("loading", true), + "SHOW_LIST_FETCH_FULFILLED": (state, action) => { + let shows = Map(); + action.payload.response.data.map(function (show) { show.fetchingDetails = false; show.fetchingSubtitles = false; - return state.setIn(['shows', show.imdb_id], fromJS(show)); - case 'SHOW_GET_EXPLORE_OPTIONS_FULFILLED': - return state.set('exploreOptions', fromJS(action.payload.response.data)); - case 'SHOW_UPDATE_STORE_WISHLIST': - let season = action.payload.season; - let episode = action.payload.episode; - if (action.payload.wishlisted) { - if (season === null) { - season = 0; - } - if (episode === null) { - episode = 0; - } - } + shows = shows.set(show.imdb_id, fromJS(show)); + }); - return state.mergeIn(['shows', action.payload.imdbId], Map({ - tracked_season: season, - tracked_episode: episode, - })); - case 'UPDATE_LAST_SHOWS_FETCH_URL': - return state.set('lastFetchUrl', action.payload.url); - case 'SELECT_SHOW': - return state.set('selectedImdbId', action.payload.imdbId); - case 'SHOWS_UPDATE_FILTER': - return state.set('filter', action.payload.filter); - default: - return state - } + let selectedImdbId = ""; + if (shows.size > 0) { + // Sort by year + shows = shows.sort((a,b) => b.get("year") - a.get("year")); + selectedImdbId = shows.first().get("imdb_id"); + } + + return state.delete("shows").merge(Map({ + shows: shows, + filter: "", + loading: false, + selectedImdbId: selectedImdbId, + })); + }, + "SHOW_GET_DETAILS_PENDING": (state, action) => state.setIn(["shows", action.payload.main.imdbId, "fetchingDetails"], true), + "SHOW_GET_DETAILS_FULFILLED": (state, action) => { + let show = action.payload.response.data; + show.fetchingDetails = false; + show.fetchingSubtitles = false; + return state.setIn(["shows", show.imdb_id], fromJS(show)); + }, + "SHOW_GET_EXPLORE_OPTIONS_FULFILLED": (state, action) => state.set("exploreOptions", fromJS(action.payload.response.data)), + "SHOW_UPDATE_STORE_WISHLIST": (state, action) => { + let season = action.payload.season; + let episode = action.payload.episode; + if (action.payload.wishlisted) { + if (season === null) { + season = 0; + } + if (episode === null) { + episode = 0; + } + } + + return state.mergeIn(["shows", action.payload.imdbId], Map({ + "tracked_season": season, + "tracked_episode": episode, + })); + }, + "UPDATE_LAST_SHOWS_FETCH_URL": (state, action) => state.set("lastFetchUrl", action.payload.url), + "SELECT_SHOW": (state, action) => state.set("selectedImdbId", action.payload.imdbId), + "SHOWS_UPDATE_FILTER": (state, action) => state.set("filter", action.payload.filter), } + +export default (state = defaultState, action) => + handlers[action.type] ? handlers[action.type](state, action) : state;