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