Update the movie reducer from switch to map
This commit is contained in:
parent
77625b382f
commit
b61be889dd
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user