Grégoire Delattre bcadc48d5a Launch prettier with the --fix option
They've changed their default settings, this changes a lot of stuff in
our code base.
2020-04-01 17:55:34 +02:00

118 lines
2.8 KiB
JavaScript

import { OrderedMap, Map, fromJS } from "immutable";
const defaultState = Map({
loading: false,
show: Map({
seasons: OrderedMap(),
}),
});
const handlers = {
SHOW_FETCH_DETAILS_PENDING: (state) => state.set("loading", true),
SHOW_FETCH_DETAILS_FULFILLED: (state, action) =>
sortEpisodes(state, action.payload.response.data),
SHOW_UPDATE_STORE_WISHLIST: (state, action) => {
return state.mergeDeep(
fromJS({
show: {
tracked_season: action.payload.season, // eslint-disable-line camelcase
tracked_episode: action.payload.episode, // eslint-disable-line camelcase
},
})
);
},
EPISODE_GET_DETAILS_PENDING: (state, action) =>
state.setIn(
[
"show",
"seasons",
action.payload.main.season,
action.payload.main.episode,
"fetching",
],
true
),
EPISODE_GET_DETAILS_FULFILLED: (state, action) => {
let data = action.payload.response.data;
if (!data) {
return state;
}
data.fetching = false;
return state.setIn(
["show", "seasons", data.season, data.episode],
fromJS(data)
);
},
EPISODE_SUBTITLES_UPDATE_PENDING: (state, action) =>
state.setIn(
[
"show",
"seasons",
action.payload.main.season,
action.payload.main.episode,
"fetchingSubtitles",
],
true
),
EPISODE_SUBTITLES_UPDATE_FULFILLED: (state, action) =>
state
.setIn(
[
"show",
"seasons",
action.payload.main.season,
action.payload.main.episode,
"subtitles",
],
fromJS(action.payload.response.data)
)
.setIn(
[
"show",
"seasons",
action.payload.main.season,
action.payload.main.episode,
"fetchingSubtitles",
],
false
),
};
const sortEpisodes = (state, show) => {
let episodes = show.episodes;
delete show["episodes"];
let ret = state.set("loading", false);
if (episodes.length == 0) {
return ret;
}
// Set the show data
ret = ret.set("show", fromJS(show));
// Set the show episodes
for (let ep of episodes) {
ep.fetching = false;
ret = ret.setIn(["show", "seasons", ep.season, ep.episode], fromJS(ep));
}
// Sort the episodes
ret = ret.updateIn(["show", "seasons"], function (seasons) {
return seasons.map(function (episodes) {
return episodes.sort((a, b) => a.get("episode") - b.get("episode"));
});
});
// Sort the seasons
ret = ret.updateIn(["show", "seasons"], function (seasons) {
return seasons.sort(function (a, b) {
return a.first().get("season") - b.first().get("season");
});
});
return ret;
};
export default (state = defaultState, action) =>
handlers[action.type] ? handlers[action.type](state, action) : state;