'use client'; import { useEffect } from 'react'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { propositionService } from '@/lib/services'; import { Proposition } from '@/types'; import { MarkdownEditor } from '@/components/MarkdownEditor'; import { useFormState } from '@/hooks/useFormState'; import { FormModal } from './FormModal'; import { handleFormError } from '@/lib/form-utils'; interface PropositionFormModalProps { isOpen: boolean; onClose: () => void; onSuccess: () => void; mode: 'add' | 'edit'; campaignId?: string; proposition?: Proposition | null; } export default function PropositionFormModal({ isOpen, onClose, onSuccess, mode, campaignId, proposition }: PropositionFormModalProps) { const initialData = { title: '', description: '', author_first_name: mode === 'add' ? 'admin' : '', author_last_name: mode === 'add' ? 'admin' : '', author_email: mode === 'add' ? 'admin@example.com' : '' }; const { formData, setFormData, loading, setLoading, error, setError, handleChange, resetForm } = useFormState(initialData); useEffect(() => { if (proposition && mode === 'edit') { setFormData({ title: proposition.title, description: proposition.description, author_first_name: proposition.author_first_name, author_last_name: proposition.author_last_name, author_email: proposition.author_email }); } }, [proposition, mode, setFormData]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); try { if (mode === 'add' && campaignId) { 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 }); } else if (mode === 'edit' && proposition) { await propositionService.update(proposition.id, { 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 }); } onSuccess(); if (mode === 'add') { resetForm(); } } catch (err: any) { const operation = mode === 'add' ? 'la création de la proposition' : 'la modification de la proposition'; setError(handleFormError(err, operation)); } finally { setLoading(false); } }; const handleClose = () => { if (mode === 'add') { resetForm(); } onClose(); }; const isEditMode = mode === 'edit'; if (isEditMode && !proposition) return null; return (
setFormData(prev => ({ ...prev, description: value }))} placeholder="Décrivez votre proposition en détail..." label="Description *" maxLength={2000} />

Informations de l'auteur

); }