import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import PageHeader from '../components/PageHeader'; import ContentGrid, { ContentItem } from '../components/ContentGrid'; import { getAllFromMyList, removeFromMyList } from '../lib/storage'; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Plus, TrashIcon } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; interface MyListItem { type: 'movie' | 'tvshow'; title: string; addedAt: string; } const MyListPage = () => { const [myListItems, setMyListItems] = useState([]); const [showRemoveButtons, setShowRemoveButtons] = useState(false); const [activeTab, setActiveTab] = useState('all'); const [isLoading, setIsLoading] = useState(true); const navigate = useNavigate(); const { toast } = useToast(); useEffect(() => { const fetchMyList = async () => { try { setIsLoading(true); const items = await getAllFromMyList(); // Sort by most recently added items.sort((a, b) => new Date(b.addedAt).getTime() - new Date(a.addedAt).getTime()); setMyListItems(items); } catch (error) { console.error("Error loading My List:", error); } finally { setIsLoading(false); } }; fetchMyList(); }, []); const handleRemoveItem = async (title: string, type: 'movie' | 'tvshow') => { try { await removeFromMyList(title, type); setMyListItems(prev => prev.filter(item => !(item.title === title && item.type === type))); toast({ title: "Removed from My List", description: `"${title}" has been removed from your list`, }); } catch (error) { console.error("Error removing item from My List:", error); toast({ title: "Error", description: "Failed to remove item from your list", variant: "destructive" }); } }; const toggleRemoveButtons = () => { setShowRemoveButtons(!showRemoveButtons); }; const getFilteredItems = (filter: string): ContentItem[] => { let filtered = myListItems; if (filter === 'movies') { filtered = myListItems.filter(item => item.type === 'movie'); } else if (filter === 'tvshows') { filtered = myListItems.filter(item => item.type === 'tvshow'); } // Convert to ContentItem format return filtered.map(item => ({ type: item.type, title: item.title, image: undefined // ContentCard will fetch the image if not provided })); }; const allItems = getFilteredItems('all'); const movieItems = getFilteredItems('movies'); const tvShowItems = getFilteredItems('tvshows'); if (isLoading) { return (
{[...Array(10)].map((_, i) => (
))}
); } return (
{myListItems.length > 0 && ( )}
{myListItems.length === 0 ? (
🎬

Your list is empty

Start adding movies and shows to create your watchlist.

) : ( All ({allItems.length}) Movies ({movieItems.length}) TV Shows ({tvShowItems.length}) )}
); }; export default MyListPage;