Grégoire Delattre 11bc7a13bc
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Add a button to refresh a show
In the show list and in the show details.
2021-02-04 11:53:24 +01:00

86 lines
2.1 KiB
JavaScript

import { produce } from "immer";
const defaultState = {
loading: false,
shows: new Map(),
selectedImdbId: "",
lastFetchUrl: "",
exploreOptions: {},
};
const formatShow = (show) => {
show.fetchingDetails = false;
show.fetchingSubtitles = false;
show.episodes = undefined;
return show;
};
const formatShows = (shows = []) => {
// Add defaults
shows.map((show) => formatShow(show));
// Sort by year
shows.sort((a, b) => b.year - a.year);
let s = new Map();
shows.forEach((show) => {
s.set(show.imdb_id, show);
});
return s;
};
export default (state = defaultState, action) =>
produce(state, (draft) => {
switch (action.type) {
case "SHOW_LIST_FETCH_PENDING":
draft.loading = true;
break;
case "SHOW_LIST_FETCH_FULFILLED":
draft.loading = false;
draft.shows = formatShows(action.payload.response.data);
if (draft.shows.size > 0) {
draft.selectedImdbId = draft.shows.keys().next().value;
}
break;
case "SHOW_GET_DETAILS_PENDING":
if (draft.shows.get(action.payload.main.imdbId)) {
draft.shows.get(action.payload.main.imdbId).fetchingDetails = true;
}
break;
case "SHOW_GET_DETAILS_FULFILLED":
draft.shows.set(
action.payload.response.data.imdb_id,
formatShow(action.payload.response.data)
);
break;
case "SHOW_GET_EXPLORE_OPTIONS_FULFILLED":
draft.exploreOptions = action.payload.response.data;
break;
case "SHOW_UPDATE_STORE_WISHLIST":
// eslint-disable-next-line camelcase
draft.shows.get(action.payload.imdbId).tracked_season =
action.payload.season;
// eslint-disable-next-line camelcase
draft.shows.get(action.payload.imdbId).tracked_episode =
action.payload.episode; // eslint-disable-line camelcase
break;
case "UPDATE_LAST_SHOWS_FETCH_URL":
draft.lastFetchUrl = action.payload.url;
break;
case "SELECT_SHOW":
draft.selectedImdbId = action.payload.imdbId;
break;
default:
return draft;
}
});