Grégoire Delattre b6be9488c9
Some checks failed
continuous-integration/drone/push Build is failing
Add a page to display a movie
2021-08-22 11:33:36 -10:00

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;
}
});