"use client"; import { useState } from "react"; import Link from "next/link"; import { Button } from "./ui"; interface ConvertButtonProps { bookId: string; } type ConvertState = | { type: "idle" } | { type: "loading" } | { type: "success"; jobId: string } | { type: "error"; message: string }; export function ConvertButton({ bookId }: ConvertButtonProps) { const [state, setState] = useState({ type: "idle" }); const handleConvert = async () => { setState({ type: "loading" }); try { const res = await fetch(`/api/books/${bookId}/convert`, { method: "POST" }); if (!res.ok) { const body = await res.json().catch(() => ({ error: res.statusText })); setState({ type: "error", message: body.error || "Échec de la conversion" }); return; } const job = await res.json(); setState({ type: "success", jobId: job.id }); } catch (err) { setState({ type: "error", message: err instanceof Error ? err.message : "Erreur inconnue" }); } }; if (state.type === "success") { return (
Conversion lancée. Voir la tâche →
); } if (state.type === "error") { return (
{state.message}
); } return ( ); }