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 ? (

) : (
No Image
)}
{t.name}
{t.release_year} • {t.release_season}
Rating: {t.rating}
{t.status}
))}
{titles.length > 0 && (
)}
);
};
export default TitlesPage;