import React, { useEffect, useState } from 'react'; import PageHeader from '../components/PageHeader'; import ContentGrid from '../components/ContentGrid'; import { getAllMovies, getMovieCard } from '../lib/api'; import { useToast } from '@/hooks/use-toast'; import { useSearchParams } from 'react-router-dom'; const MoviesPage = () => { const [loading, setLoading] = useState(true); const [movies, setMovies] = useState([]); const [searchParams] = useSearchParams(); const genreFilter = searchParams.get('genre'); const { toast } = useToast(); useEffect(() => { const fetchMovies = async () => { try { setLoading(true); const allMovies = await getAllMovies(); // For each movie, get its card info for display const moviePromises = allMovies.slice(0, 30).map(async (movie: any) => { try { const movieInfo = await getMovieCard(movie.title); if (movieInfo) { return { type: 'movie', title: movie.title, image: movieInfo.image, description: movieInfo.overview, genre: movieInfo.genres?.map((g: any) => g.name) || [], year: movieInfo.year }; } return null; } catch (error) { console.error(`Error fetching movie info for ${movie.title}:`, error); return null; } }); let moviesData = await Promise.all(moviePromises); moviesData = moviesData.filter(movie => movie !== null); // Apply genre filter if present if (genreFilter) { moviesData = moviesData.filter(movie => movie.genre.some((g: string) => g.toLowerCase() === genreFilter.toLowerCase()) ); } setMovies(moviesData); } catch (error) { console.error('Error fetching movies:', error); toast({ title: "Error loading movies", description: "Please try again later", variant: "destructive" }); } finally { setLoading(false); } }; fetchMovies(); }, [genreFilter, toast]); return (
{loading ? (
) : ( )}
); }; export default MoviesPage;