You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.6 KiB
123 lines
3.6 KiB
import {ADD_FAVOURITE, ADD_WATCHLATER, FETCH_TRENDING_MOVIE, LOAD_FAVOURITE, LOAD_WATCHLATER, POP_FIRST_TRENDING} from '../constants'
|
|
import config from "../../constants/config"
|
|
import Movie from "../../model/Movie"
|
|
import {getFavouriteList, getWatchLaterList} from "../../storage/storage"
|
|
|
|
|
|
|
|
export const setWatchLater = (TrendingMovieList: null | Movie[]) => {
|
|
return {
|
|
type: LOAD_WATCHLATER,
|
|
payload: TrendingMovieList,
|
|
}
|
|
}
|
|
|
|
export const setFavourite = (FavouriteList: null | Movie[]) => {
|
|
return {
|
|
type: LOAD_FAVOURITE,
|
|
payload: FavouriteList,
|
|
}
|
|
}
|
|
|
|
|
|
export const getWatchLater = () => {
|
|
// @ts-ignore
|
|
return async dispatch => {
|
|
try {
|
|
let MovieList = await getWatchLaterList();
|
|
dispatch(setWatchLater(MovieList));
|
|
|
|
|
|
} catch (error) {
|
|
console.log('Error', error);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export const getFavourite = () => {
|
|
// @ts-ignore
|
|
return async dispatch => {
|
|
try {
|
|
let MovieList = await getFavouriteList();
|
|
dispatch(setFavourite(MovieList));
|
|
|
|
|
|
} catch (error) {
|
|
console.log('Error', error);
|
|
}
|
|
}
|
|
}
|
|
export const setinfoMovie = (TrendingMovieList: null | Movie[]) => {
|
|
return {
|
|
type: FETCH_TRENDING_MOVIE,
|
|
payload: TrendingMovieList,
|
|
};
|
|
}
|
|
|
|
export const getTrendingID = () => {
|
|
// @ts-ignore
|
|
return async dispatch => {
|
|
try {
|
|
const IDPromise = await fetch(config.base_url + "trending/movie/day?api_key=" + config.api_key);
|
|
const IDListJson = await IDPromise.json();
|
|
// @ts-ignore
|
|
const idList: string[] = IDListJson.results.map(elt => elt["id"]);
|
|
const MovieList: Movie[] = [];
|
|
Promise.all(idList.map(async elt => {
|
|
try {
|
|
return await fetch(config.base_url + "movie/" + elt + "?api_key=" + config.api_key + "&language=fr-FR");
|
|
} catch (err) {
|
|
console.log('Error', err);
|
|
}
|
|
})).then(function (responses) {
|
|
// @ts-ignore
|
|
Promise.all(responses.map(result => result.json()))
|
|
.then(function (elements) {
|
|
elements.forEach(elt => {
|
|
const infoJson = elt;
|
|
const genreRow: string[] = [];
|
|
// @ts-ignore
|
|
elt["genres"].map(genre => {
|
|
genreRow.push(genre.name);
|
|
});
|
|
|
|
// @ts-ignore
|
|
MovieList.push(new Movie(infoJson["id"], infoJson["title"], infoJson["poster_path"], infoJson["runtime"], infoJson["vote_average"], infoJson["release_date"], genreRow, infoJson["overview"], infoJson["backdrop_path"]))
|
|
})
|
|
try {
|
|
dispatch(setinfoMovie(MovieList));
|
|
} catch (err) {
|
|
console.log('Error', err);
|
|
}
|
|
})
|
|
|
|
});
|
|
|
|
} catch (error) {
|
|
console.log('Error', error);
|
|
}
|
|
}
|
|
}
|
|
|
|
export const removeMovieTrending = (movie: Movie) => {
|
|
return {
|
|
type: POP_FIRST_TRENDING,
|
|
payload: movie
|
|
}
|
|
}
|
|
|
|
export const addMovieToWatchLater = (movie: Movie) => {
|
|
return {
|
|
type: ADD_WATCHLATER,
|
|
payload: movie
|
|
}
|
|
}
|
|
|
|
export const addMovieToFavourite = (movie: Movie) => {
|
|
return {
|
|
type: ADD_FAVOURITE,
|
|
payload: movie
|
|
}
|
|
} |