import React, { useEffect, useState } from "react"; import { DefaultService } from "../../api/services/DefaultService"; import type { Title } from "../../api/models/Title"; import styles from "./TitlesPage.module.css"; const LIMIT = 20; const TitlesPage: React.FC = () => { const [titles, setTitles] = useState([]); const [search, setSearch] = useState(""); const [offset, setOffset] = useState(0); const [loading, setLoading] = useState(true); const [loadingMore, setLoadingMore] = useState(false); const [error, setError] = useState(null); const fetchTitles = async (reset: boolean) => { try { if (reset) { setLoading(true); setOffset(0); } else { setLoadingMore(true); } const result = await DefaultService.getTitles( search || undefined, undefined, // status undefined, // rating undefined, // release_year undefined, // release_season LIMIT, reset ? 0 : offset, "all" ); if (reset) { setTitles(result); } else { setTitles(prev => [...prev, ...result]); } if (result.length > 0) { setOffset(prev => prev + LIMIT); } } catch (err) { console.error(err); setError("Failed to fetch titles."); } finally { setLoading(false); setLoadingMore(false); } }; useEffect(() => { fetchTitles(true); }, [search]); if (loading) return
Loading...
; if (error) return
{error}
; return (

Titles

setSearch(e.target.value)} />
{titles.map((t) => (
{t.poster_id ? ( Poster ) : (
No Image
)}

{t.name}

{t.release_year} • {t.release_season}

Rating: {t.rating}

{t.status}

))}
{titles.length > 0 && ( )}
); }; export default TitlesPage;