Update the shows reducer from switch to map

This commit is contained in:
Grégoire Delattre 2017-06-02 21:12:20 +02:00
parent 255aa83453
commit d144d0a982

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,63 +9,59 @@ const defaultState = Map({
exploreOptions: Map(), exploreOptions: Map(),
}); });
export default function showsStore(state = defaultState, action) { const handlers = {
switch (action.type) { "SHOW_LIST_FETCH_PENDING": state => state.set("loading", true),
case 'SHOW_LIST_FETCH_PENDING': "SHOW_LIST_FETCH_FULFILLED": (state, action) => {
return state.set('loading', true); let shows = Map();
case 'SHOW_LIST_FETCH_FULFILLED': action.payload.response.data.map(function (show) {
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;
show.fetchingDetails = false; show.fetchingDetails = false;
show.fetchingSubtitles = false; show.fetchingSubtitles = false;
return state.setIn(['shows', show.imdb_id], fromJS(show)); shows = shows.set(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;
}
}
return state.mergeIn(['shows', action.payload.imdbId], Map({ let selectedImdbId = "";
tracked_season: season, if (shows.size > 0) {
tracked_episode: episode, // Sort by year
})); shows = shows.sort((a,b) => b.get("year") - a.get("year"));
case 'UPDATE_LAST_SHOWS_FETCH_URL': selectedImdbId = shows.first().get("imdb_id");
return state.set('lastFetchUrl', action.payload.url); }
case 'SELECT_SHOW':
return state.set('selectedImdbId', action.payload.imdbId); return state.delete("shows").merge(Map({
case 'SHOWS_UPDATE_FILTER': shows: shows,
return state.set('filter', action.payload.filter); filter: "",
default: loading: false,
return state 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;