"use client"; import React, { useState, useTransition } from 'react'; import { X, Newspaper, User, Image as ImageIcon, AlertTriangle, Loader2, AlignLeft } from 'lucide-react'; import { createNews } from '@/app/actions/news'; import { uploadImage } from '@/app/actions/upload'; import { toast } from 'react-hot-toast'; interface CreateNewsModalProps { isOpen: boolean; onClose: () => void; } export default function CreateNewsModal({ isOpen, onClose }: CreateNewsModalProps) { const [isPending, startTransition] = useTransition(); const [imagePreview, setImagePreview] = useState(null); const [uploading, setUploading] = useState(false); if (!isOpen) return null; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const formData = new FormData(e.currentTarget); const data = { title: formData.get('title') as string, excerpt: formData.get('excerpt') as string, content: formData.get('content') as string, author: formData.get('author') as string, imageUrl: imagePreview || "https://picsum.photos/800/400?random=news", }; if (!data.title || !data.excerpt || !data.content || !data.author) { toast.error("Veuillez remplir tous les champs obligatoires"); return; } startTransition(async () => { const result = await createNews(data); if (result.success) { toast.success("Actualité soumise avec succès !"); onClose(); } else { toast.error(result.error || "Une erreur est survenue"); } }); }; const handleImageChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); const formData = new FormData(); formData.append('file', file); const result = await uploadImage(formData); if (result.success && result.url) { setImagePreview(result.url); } else { toast.error(result.error || "Erreur lors de l'upload"); } setUploading(false); }; return (

Publier une actualité

Mettez en avant vos succès et nouveautés

{/* Warning */}

Information importante

Votre article sera soumis à la validation de notre équipe de modération avant d'être publié dans la section Actualités.

{imagePreview ? (
Preview
) : ( <> {uploading ? ( ) : ( )}

Cliquez pour ajouter une image

PNG, JPG jusqu'à 2Mo

)}
); }