'use client'; import { useState, useEffect } from 'react'; import { useNotification } from './NotificationProvider'; import { useBodyScrollLock } from '@/lib/body-scroll-lock'; interface Participation { id: string; destinataireEmail: string; destinataireNom: string; destinataireType: string; montant: number | null; complement: string | null; adherent: { id: string; nom: string; prenom: string; email: string }; trajet: { id: string; date: string; adresseDepart: string; adresseArrivee: string }; } interface ParticipationEditModalProps { participation: Participation; onClose: () => void; onSuccess: () => void; } export default function ParticipationEditModal({ participation, onClose, onSuccess, }: ParticipationEditModalProps) { const { showNotification } = useNotification(); useBodyScrollLock(true); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ destinataireEmail: '', destinataireNom: '', destinataireType: 'adherent', montant: '', complement: '', }); useEffect(() => { setFormData({ destinataireEmail: participation.destinataireEmail, destinataireNom: participation.destinataireNom, destinataireType: participation.destinataireType || 'adherent', montant: participation.montant != null ? String(participation.montant) : '', complement: participation.complement || '', }); }, [participation]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); try { const response = await fetch(`/api/participations/${participation.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ destinataireEmail: formData.destinataireEmail, destinataireNom: formData.destinataireNom, destinataireType: formData.destinataireType, montant: formData.montant ? parseFloat(formData.montant) : null, complement: formData.complement || null, }), }); if (response.ok) { onSuccess(); onClose(); } else { const data = await response.json(); showNotification('error', data.error || 'Erreur lors de la mise à jour'); } } catch (error) { showNotification('error', 'Erreur lors de la mise à jour'); } finally { setLoading(false); } }; const handleBackdropClick = (e: React.MouseEvent) => { if (e.target === e.currentTarget) onClose(); }; const inputBaseClass = 'w-full px-3 py-2 border border-gray-300 rounded-lg bg-white text-gray-900 placeholder-gray-400 focus:ring-2 focus:ring-lblue focus:border-transparent selection:bg-lblue selection:text-white'; return (
{participation.adherent.prenom} {participation.adherent.nom} -{' '} {new Date(participation.trajet.date).toLocaleDateString('fr-FR')}