import React, { useState } from 'react'; import { createPortal } from 'react-dom'; export default function LitigeModal({ reclamationId, submitUrl, objetTitre, objetImage, objetReference, objetDate, csrfToken, showLabel = false, label = '', customClass = '', isDisabled = false }) { const [isOpen, setIsOpen] = useState(false); const [localIsDisabled, setLocalIsDisabled] = useState(isDisabled); const [formData, setFormData] = useState({ motif: '', description: '' }); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(false); const motifs = [ { value: 'objet non conforme', label: 'Objet non conforme' }, { value: 'refus remise', label: 'Refus de remise' }, { value: 'comportement suspect', label: 'Comportement suspect' }, { value: 'erreur_restitution', label: 'Erreur dans la restitution' }, { value: 'non presentation', label: 'Non-présentation au rendez-vous' }, { value: 'autre', label: 'Autre' } ]; const toggleModal = () => { // Ne bloque l'action que si l'on essaie d'OUVRIR la modale alors qu'elle est désactivée. // On doit toujours pouvoir la FERMER. if (!isOpen && localIsDisabled) return; setIsOpen(!isOpen); }; const handleSubmit = async (e) => { e.preventDefault(); setIsSubmitting(true); setError(null); const body = new FormData(); body.append('client_litige[motif]', formData.motif); body.append('client_litige[description]', formData.description); body.append('client_litige[_token]', csrfToken); try { const response = await fetch(submitUrl, { method: 'POST', body: body, headers: { 'Accept': 'application/json' } }); const data = await response.json(); if (data.success) { setSuccess(true); setLocalIsDisabled(true); // Bloquer le bouton immédiatement } else { setError(data.errors ? data.errors.join(', ') : 'Une erreur est survenue.'); } } catch (err) { setError('Erreur de connexion au serveur.'); } finally { setIsSubmitting(false); } }; const modalContent = (
Votre demande de médiation a été transmise aux administrateurs. L'objet est désormais marqué en litige.