78 lines
1.9 KiB
JavaScript
78 lines
1.9 KiB
JavaScript
import { produce } from "immer";
|
|
|
|
import { formatSubtitle, formatMovie } from "./utils";
|
|
|
|
const defaultState = {
|
|
loading: false,
|
|
movie: {},
|
|
};
|
|
|
|
export default (state = defaultState, action) =>
|
|
produce(state, (draft) => {
|
|
switch (action.type) {
|
|
case "MOVIE_FETCH_DETAILS_PENDING":
|
|
draft.loading = true;
|
|
break;
|
|
|
|
case "MOVIE_FETCH_DETAILS_FULFILLED": {
|
|
draft.movie = formatMovie(action.payload.response.data);
|
|
draft.loading = false;
|
|
break;
|
|
}
|
|
|
|
case "MOVIE_GET_DETAILS_PENDING": {
|
|
let imdbId = action.payload.main.imdbId;
|
|
if (draft.movie.imdb_id !== imdbId) {
|
|
break;
|
|
}
|
|
|
|
draft.movie.fetchingDetails = true;
|
|
break;
|
|
}
|
|
|
|
case "MOVIE_GET_DETAILS_FULFILLED": {
|
|
let imdbId = action.payload.main.imdbId;
|
|
if (draft.movie.imdb_id !== imdbId) {
|
|
break;
|
|
}
|
|
|
|
draft.movie = formatMovie(action.payload.response.data);
|
|
break;
|
|
}
|
|
|
|
case "MOVIE_SUBTITLES_UPDATE_PENDING": {
|
|
let imdbId = action.payload.main.imdbId;
|
|
if (draft.movie.imdb_id !== imdbId) {
|
|
break;
|
|
}
|
|
|
|
let lang = action.payload.main.lang;
|
|
draft.movie.fetchingSubtitles.push(lang);
|
|
if (draft.movie.subtitles.get(lang)) {
|
|
draft.movie.subtitles.get(lang).searching = true;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case "MOVIE_SUBTITLES_UPDATE_FULFILLED": {
|
|
let imdbId = action.payload.main.imdbId;
|
|
if (draft.movie.imdb_id !== imdbId) {
|
|
break;
|
|
}
|
|
|
|
let lang = action.payload.main.lang;
|
|
let data = action.payload.response.data;
|
|
draft.movie.fetchingSubtitles = draft.movie.fetchingSubtitles.filter(
|
|
(l) => l != lang
|
|
);
|
|
if (data) {
|
|
draft.movie.subtitles.set(lang, formatSubtitle(data));
|
|
}
|
|
break;
|
|
}
|
|
|
|
default:
|
|
return draft;
|
|
}
|
|
});
|