86 lines
2.1 KiB
JavaScript
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;
|
|
}
|
|
});
|