import { useEffect, useState } from "react"; import type { BookDto, JobDto, LibraryDto } from "@readabook/shared"; import { api } from "../api/client"; import { hasActiveCoverWork, isBookCoverUpdating } from "../api/types"; import { BookCard } from "../components/BookCard"; import { EmptyState, LoadingState, Panel } from "../components/ui"; export function LibraryPage({ libraryId }: { libraryId: number }) { const [books, setBooks] = useState(null); const [libraries, setLibraries] = useState([]); const [jobs, setJobs] = useState([]); useEffect(() => { let alive = true; Promise.all([api.books({ libraryId }), api.libraries(), api.jobs().catch(() => [])]).then(([nextBooks, nextLibraries, nextJobs]) => { if (!alive) return; setBooks(nextBooks); setLibraries(nextLibraries); setJobs(nextJobs); }); return () => { alive = false; }; }, [libraryId]); if (!books) return ; const library = libraries.find((item) => item.id === libraryId); const fallbackCoverLoading = hasActiveCoverWork(jobs); return (

{library?.name ?? "Bibliotheque"}

{library?.path ?? "Rayonnage non identifie"}

{books.length} ouvrages
{books.length ? (
{books.map((book) => ( ))}
) : ( )}
); }