import * as React from 'react'; import { Button, TouchableOpacity, ScrollView, View, Text, StyleSheet, Image, ImageBackground, SafeAreaView, ActivityIndicator, FlatList, TouchableHighlight } from 'react-native'; import {RootStackScreenProps} from "../types"; import {useSafeAreaInsets} from "react-native-safe-area-context"; import Movie from "../model/Movie"; import {LinearGradient} from 'expo-linear-gradient'; import {Stars} from "./HomeScreen"; import {useEffect, useState} from "react"; import config from "../constants/config"; import YoutubeIframe from "react-native-youtube-iframe"; import Icon from "react-native-ionicons"; import Ionicons from "@expo/vector-icons/Ionicons"; import MinimalMovie from "../model/MinimalMovie"; import {ListWidget} from "./WatchLaterScreen"; import Review from "../model/review"; export default function InfoScreen({navigation, route}: RootStackScreenProps<'Info'>) { const item: Movie = route.params.item console.log("current", item); const insets = useSafeAreaInsets(); const styles = StyleSheet.create({ background1: { height: '100%', width: '100%', paddingTop: insets.top, }, }); const [trailerPath, setTrailerPath] = useState(""); const [similarMovies, setsimilarMovies] = useState([]); const [review, setReview] = useState([]); const getTriller = async () => { const trailerResponse = (await fetch(config.base_url + "movie/" + item.id + "/videos?api_key=" + config.api_key + "&language=fr-FR")); const trailerJson = await trailerResponse.json(); console.log("trailer", trailerJson) const trailer_key = trailerJson.results.slice(0, 1).map((elt) => { if (elt["type"] === "Trailer" && elt["site"] === "YouTube") { return elt["key"]; } }); console.log("key", trailer_key) setTrailerPath(trailer_key); } const getSimilarMovies = async () => { const SimilarMoviesResponse = (await fetch(config.base_url + "movie/" + item.id + "/recommendations?api_key=" + config.api_key + "&language=fr-FR")); const SimilarMoviesJson = await SimilarMoviesResponse.json(); const SimilarMoviesList = SimilarMoviesJson.results.slice(0, 10).map((elt) => { return new MinimalMovie(elt["original_title"], elt["poster_path"]) }); console.log("similar", SimilarMoviesList); setsimilarMovies(SimilarMoviesList); } const getReview = async () => { const ReviewResponse = (await fetch(config.base_url + "movie/" + item.id + "/reviews?api_key=" + config.api_key + "&language=us-EN&page=1")); const ReviewJson = await ReviewResponse.json(); const ReviewList = ReviewJson.results.map((elt) => { return new Review(elt["content"], elt["author_details"].avatar_path, elt["created_at"], elt["author"]) }); console.log("review", ReviewList); setReview(ReviewList); } useEffect(() => { getReview(); getTriller(); getSimilarMovies(); }, []); function formatTime(time: number) { console.log(time); const hours = Math.floor(time / 60); const minutes = time % 60; return `${hours}h ${minutes < 10 ? `0${minutes}` : minutes}m`; } return ( navigation.goBack()} style={{zIndex: 100}}> {item.original_title} {item.vote_average.toFixed(1)} {trailerPath !== "" && ( )} {item.overview} {similarMovies.length !== 0 && ( <> Recommandations item.original_title} renderItem={({item}) => {item.original_title} } /> )} {review.length !== 0 && ( <> Commentaires item.profil_path} renderItem={({item}) => {item.pseudo} {item.date} {item.message} } /> )} ) } type InfoBadgeProps = { texte: string } export function InfoBadge(props: InfoBadgeProps) { return ( {props.texte} ); }