import React, { useState } from "react"; import { useNavigate } from "react-router-dom"; import { booksApi } from "../api/books"; export function AddBookPage() { const navigate = useNavigate(); const [title, setTitle] = useState(""); const [author, setAuthor] = useState(""); const [file, setFile] = useState(null); const [uploading, setUploading] = useState(false); const [error, setError] = useState(null); const handleFileChange = (e: React.ChangeEvent) => { const selected = e.target.files?.[0] ?? null; if (selected) { const ext = selected.name.split(".").pop()?.toLowerCase(); if (ext !== "epub" && ext !== "pdf") { setError("Only EPUB and PDF files are supported."); setFile(null); return; } setFile(selected); setError(null); if (!title) setTitle(selected.name.replace(/\.(epub|pdf)$/i, "")); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!file || !title.trim()) { setError("Title and file are required."); return; } setUploading(true); setError(null); try { await booksApi.uploadEBook(file, title.trim(), author.trim()); navigate("/"); } catch (err) { setError(err instanceof Error ? err.message : "Upload failed."); } finally { setUploading(false); } }; return (

Add Book

{error &&
{error}
}
{file &&

Selected: {file.name}

}
setTitle(e.target.value)} placeholder="Book title" style={{ padding: "10px 12px", borderRadius: 6, border: "1px solid #ddd", fontSize: 16, outline: "none" }} />
setAuthor(e.target.value)} placeholder="Author name" style={{ padding: "10px 12px", borderRadius: 6, border: "1px solid #ddd", fontSize: 16, outline: "none" }} />
); }