From cd43f9c513203aa80cef1907dbfba29af0ac9c60 Mon Sep 17 00:00:00 2001 From: PJ Date: Sat, 20 Jun 2026 15:09:13 -0400 Subject: [PATCH] feat(library): book organizer home screen --- src/components/Library.tsx | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/components/Library.tsx diff --git a/src/components/Library.tsx b/src/components/Library.tsx new file mode 100644 index 0000000..bd0b3d2 --- /dev/null +++ b/src/components/Library.tsx @@ -0,0 +1,47 @@ +import { useEffect, useState, type MouseEvent } from "react"; +import { type BookSummary, deleteBook, exampleBook, listBooks, loadBook, newBook } from "../library"; +import type { Book } from "../model/book"; +import { Icon } from "./Icon"; + +export function Library({ onOpen }: { onOpen: (book: Book) => void }) { + const [books, setBooks] = useState([]); + + const refresh = () => listBooks().then(setBooks).catch(() => setBooks([])); + useEffect(() => { + refresh(); + }, []); + + const removeBook = async (e: MouseEvent, id: string) => { + e.stopPropagation(); + await deleteBook(id); + refresh(); + }; + + return ( +
+
+ margin + +
+
+ + + {books.map((b) => ( +
loadBook(b.id).then(onOpen)}> + {b.title || "Untitled"} + {b.author && {b.author}} + +
+ ))} +
+
+ ); +}