import { useEffect, useState, useCallback } from "react"; import { useNavigate } from "react-router-dom"; import api from "../lib/api"; import Hero from "../components/Hero"; import Row from "../components/Row"; import MovieDetailModal from "../components/MovieDetailModal"; export default function Browse() { const nav = useNavigate(); const [featured, setFeatured] = useState(null); const [movies, setMovies] = useState([]); const [genres, setGenres] = useState([]); const [continueWatching, setContinueWatching] = useState([]); const [watchlist, setWatchlist] = useState([]); const [selected, setSelected] = useState(null); const [progressMap, setProgressMap] = useState({}); const load = useCallback(async () => { const [{ data: f }, { data: ms }, { data: gs }, { data: cw }, { data: wl }] = await Promise.all([ api.get("/movies/featured").catch(() => ({ data: null })), api.get("/movies"), api.get("/movies/genres"), api.get("/progress/continue").catch(() => ({ data: [] })), api.get("/watchlist").catch(() => ({ data: [] })), ]); setFeatured(f); setMovies(ms); setGenres(gs); setContinueWatching(cw); setWatchlist(wl); const map = {}; for (const m of cw) map[m.id] = m.progress; setProgressMap(map); }, []); useEffect(() => { load(); }, [load]); const handlePlay = (m) => nav(`/watch/${m.id}`); const handleMore = (m) => setSelected(m); const handleAddList = async (m) => { try { await api.post(`/watchlist/${m.id}`); load(); } catch {} }; const byGenre = (g) => movies.filter((m) => m.genres?.includes(g)); const trending = movies.slice(0, 10); const newReleases = [...movies].sort((a, b) => b.year - a.year).slice(0, 12); return (
{featured && ( )}
{continueWatching.length > 0 && ( )} {watchlist.length > 0 && ( )} {genres.slice(0, 6).map((g) => { const list = byGenre(g); if (!list.length) return null; return ; })}
setSelected(null)} onWatchlistChange={load} />
); }