import React, { useState } from 'react'; import { X, Send, Image as ImageIcon, Link2, Bold, Italic, List } from 'lucide-react'; import { useModal } from '../context/ModalContext'; import { useAuth } from '../context/AuthContext'; import { forumService } from '../services'; const AskQuestionModal: React.FC = () => { const { isAskQuestionModalOpen, closeAskQuestionModal } = useModal(); const { gainPoints, unlockBadge } = useAuth(); const [title, setTitle] = useState(''); const [category, setCategory] = useState(''); const [level, setLevel] = useState(''); const [tags, setTags] = useState([]); const [tagInput, setTagInput] = useState(''); const [content, setContent] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); if (!isAskQuestionModalOpen) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); setError(null); try { // Préparer les tags (inclure catégorie et niveau) const allTags = [ ...tags, category.toLowerCase(), level.toLowerCase() ].filter(Boolean); // Appel API pour créer la question const newQuestion = await forumService.createQuestion({ title, content, tags: allTags }); // Gamification: Points + Badge gainPoints(50); // 50 points pour une question unlockBadge('b1'); // Badge "Premier Pas" // Notification de succès alert('✅ Votre question a été publiée avec succès !'); // Fermer le modal closeAskQuestionModal(); // Reset form setTitle(''); setCategory(''); setLevel(''); setTags([]); setTagInput(''); setContent(''); // Recharger la page pour voir la nouvelle question window.location.reload(); } catch (err: any) { console.error('Erreur lors de la création de la question:', err); setError( err.response?.data?.message || err.response?.data?.detail || 'Impossible de publier votre question. Veuillez réessayer.' ); } finally { setIsSubmitting(false); } }; const handleTagInputKeyDown = (e: React.KeyboardEvent) => { if (e.key === ' ' || e.key === 'Enter' || e.key === ',') { e.preventDefault(); const newTag = tagInput.trim(); if (newTag && !tags.includes(newTag)) { setTags([...tags, newTag]); } setTagInput(''); } else if (e.key === 'Backspace' && !tagInput && tags.length > 0) { setTags(tags.slice(0, -1)); } }; const removeTag = (tagToRemove: string) => { setTags(tags.filter(tag => tag !== tagToRemove)); }; return (

Poser une question à la communauté

{/* Message d'erreur */} {error && (
Erreur: {error}
)}
setTitle(e.target.value)} disabled={isSubmitting} className="w-full rounded-xl border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-900 px-4 py-2.5 text-sm focus:ring-2 focus:ring-edu-secondary outline-none dark:text-white placeholder-gray-400 transition-shadow disabled:opacity-50 disabled:cursor-not-allowed" placeholder="Ex: Comment implémenter une authentification JWT ?" />
{tags.map(tag => ( {tag} ))} setTagInput(e.target.value)} onKeyDown={handleTagInputKeyDown} disabled={isSubmitting} className="flex-grow bg-transparent outline-none min-w-[150px] dark:text-white placeholder-gray-400 h-8 disabled:opacity-50" placeholder={tags.length === 0 ? "Ex: algebre, react (Espace pour ajouter)" : ""} />

Appuyez sur Espace pour créer un tag.

{/* Toolbar simulation */}
); }; export default AskQuestionModal;