/** * Modal — suggestions d'idées DeepSeek (tâche G5). * * Présentationnel pur. La fermeture déclenche `onClose` qui doit appeler * `reset()` du hook useIdees côté parent pour vider le cache de mutation. * * Règle H : aucune logique métier. Règle L : tokens Direction H uniquement. */ import { Loader2, Lightbulb } from 'lucide-react' import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/shared/components/ui/dialog' import type { ApiError } from '@/shared/types/api' function mapIdeesError(err: ApiError | null): string | null { if (!err) return null switch (err.code) { case 'AUTH_REQUIRED': return 'Votre session a expiré. Reconnectez-vous.' case 'VALIDATION_ERROR': case 'INVALID_BODY': return 'Écrivez au moins 30 mots avant de demander des suggestions.' default: return 'Suggestions indisponibles. Réessayez dans quelques instants.' } } interface Props { idees: string[] | null isLoading: boolean error: ApiError | null isOpen: boolean onClose: () => void } export function IdeesSuggestions({ idees, isLoading, error, isOpen, onClose }: Props) { const message = mapIdeesError(error) return ( { if (!open) onClose() }} > Pour prolonger votre rédaction, inspirez-vous de ces pistes. {isLoading && (
)} {!isLoading && message && (
{message}
)} {!isLoading && !message && idees && idees.length > 0 && ( )}
) }