'use client'; import { useState, useEffect } from 'react'; import { useParams } from 'next/navigation'; import Link from 'next/link'; import { Campaign } from '@/types'; import { campaignService, propositionService } from '@/lib/services'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { ArrowLeft, FileText, User, Mail, CheckCircle, AlertCircle } from 'lucide-react'; export const dynamic = 'force-dynamic'; export default function PublicProposePage() { const params = useParams(); const campaignId = params.id as string; const [campaign, setCampaign] = useState(null); const [loading, setLoading] = useState(true); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); const [formData, setFormData] = useState({ title: '', description: '', author_first_name: '', author_last_name: '', author_email: '' }); useEffect(() => { if (campaignId) { loadCampaign(); } }, [campaignId]); const loadCampaign = async () => { try { setLoading(true); const campaigns = await campaignService.getAll(); const campaignData = campaigns.find(c => c.id === campaignId); if (!campaignData) { setError('Campagne non trouvée'); return; } if (campaignData.status !== 'deposit') { setError('Cette campagne n\'accepte plus de propositions'); return; } setCampaign(campaignData); } catch (error) { console.error('Erreur lors du chargement de la campagne:', error); setError('Erreur lors du chargement de la campagne'); } finally { setLoading(false); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSubmitting(true); setError(''); try { await propositionService.create({ campaign_id: campaignId, title: formData.title, description: formData.description, author_first_name: formData.author_first_name, author_last_name: formData.author_last_name, author_email: formData.author_email }); setSuccess(true); setFormData({ title: '', description: '', author_first_name: '', author_last_name: '', author_email: '' }); } catch (err: any) { const errorMessage = err?.message || err?.details || 'Erreur lors de la soumission de la proposition'; setError(`Erreur lors de la soumission de la proposition: ${errorMessage}`); } finally { setSubmitting(false); } }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; if (loading) { return (

Chargement de la campagne...

); } if (error && !campaign) { return (

Erreur

{error}

); } if (success) { return (

Proposition soumise !

Votre proposition a été soumise avec succès. Merci pour votre participation !

); } return (
{/* Header */}

Déposer une proposition

Campagne : {campaign?.title}

{/* Campaign Info */} Informations sur la campagne

Description

{campaign?.description}
{/* Form */} Votre proposition Remplissez le formulaire ci-dessous pour soumettre votre proposition.
{error && (

{error}

)}