import React, { useState, useContext } from 'react' import { motion } from 'framer-motion' import MovieCard from '../components/MovieCard' import { MovieCardSkeleton } from '../components/LoadingSkeleton' import { useMovies } from '../hooks/useApi' import { ViewContext } from '../components/Layout' import { FilmIcon } from '@heroicons/react/24/outline' // Import from components import { MediaListView } from '../components/MediaListView' import { MediaDetailView } from '../components/MediaDetailView' export default function Movies() { const viewContext = useContext(ViewContext) const viewMode = viewContext?.viewMode || 'grid' const gridColumns = viewContext?.gridColumns || 5 const coverSize = viewContext?.coverSize || 200 const PaginationComp = viewContext?.PaginationComponent const getGridClass = (columns: number) => { const columnClasses = { 2: 'grid-cols-1 md:grid-cols-2', 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3', 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4', 5: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5', 6: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6', 7: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-7', 8: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-8' } return columnClasses[columns as keyof typeof columnClasses] || columnClasses[5] } const [currentPage, setCurrentPage] = useState(1) const [pageSize, setPageSize] = useState(24) const { data: moviesData, isLoading } = useMovies({ page: currentPage, per_page: pageSize }) const movies = moviesData?.items || [] const pagination = moviesData?.pagination // Convert movies to MediaItem format for MediaListView const mediaItems = movies.map(movie => ({ id: movie.id.toString(), title: movie.title || 'Untitled Movie', type: 'movie' as const, coverUrl: movie.poster_url || movie.cover_url || '', rating: Number(movie.rating) || 0, status: 'completed' as const, // Default status releaseYear: movie.release_year || movie.year || new Date().getFullYear(), addedAt: movie.created_at || new Date().toISOString(), favorite: movie.favorite || false, platform: movie.source_name || 'Unknown', description: movie.description || '', genres: movie.genres || [] })) // State for MediaListView const [selectedId, setSelectedId] = useState(null) const [multiSelectedIds, setMultiSelectedIds] = useState>(new Set()) const [detailItem, setDetailItem] = useState(null) const handleSelect = (item: any) => { setSelectedId(item.id) setDetailItem(item) } const handleToggleSelect = (id: string) => { const newSelected = new Set(multiSelectedIds) if (newSelected.has(id)) { newSelected.delete(id) } else { newSelected.add(id) } setMultiSelectedIds(newSelected) } return ( <>
{isLoading ? (
{Array.from({ length: pageSize }, (_, i) => ( ))}
) : viewMode === 'list' ? ( // Use MediaListView for list mode with sideview
{detailItem && (
setDetailItem(null)} onEdit={(item) => console.log('Edit item:', item)} onToggleFavorite={(id, isFav) => console.log('Toggle favorite:', id, isFav)} onSelectRelated={(item) => setDetailItem(item)} onSelectPerson={(name, id) => console.log('Select person:', name, id)} onViewAll={(type, id) => console.log('View all:', type, id)} />
)}
) : ( // Grid view with MovieCard {movies.map((movie, index) => ( ))} )} {!isLoading && pagination && pagination.last_page > 1 && PaginationComp && (
)}
) }