'use client' import { useCallback, useEffect, useState } from 'react' import { ApiClientError, cardsApi } from '@/lib/api-client' import type { Card } from '@/domain/card' const EMPTY_THEME = '' export function PlayView() { const [themes, setThemes] = useState([]) const [theme, setTheme] = useState(EMPTY_THEME) const [card, setCard] = useState(null) const [revealed, setRevealed] = useState(false) const [error, setError] = useState(null) const [drawing, setDrawing] = useState(false) useEffect(() => { let cancelled = false cardsApi .themes() .then((data) => { if (!cancelled) setThemes(data) }) .catch(() => { /* thèmes optionnels : le jeu reste utilisable en tirage global */ }) return () => { cancelled = true } }, []) const draw = useCallback(async () => { setDrawing(true) setRevealed(false) setError(null) try { const picked = await cardsApi.random(theme === EMPTY_THEME ? undefined : theme) setCard(picked) } catch (e) { if (e instanceof ApiClientError) { setError(e.message) setCard(null) } else { setError('Impossible de tirer une carte') setCard(null) } } finally { setDrawing(false) } }, [theme]) return (
{error && (

{error}

)} {card && (
{card.theme}

{card.question}

{revealed ? (

{card.response}

) : (
)}
)} {card === null && !error && (

Cliquez sur "Tirer une carte" pour commencer.

)}
) }