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 = (
Signaler un litige
{success ? (

Signalement envoyé avec succès

Votre demande de médiation a été transmise aux administrateurs. L'objet est désormais marqué en litige.

) : (
{objetImage ? ( {objetTitre} ) : (
)}
{objetTitre}
REF: {objetReference}
Trouvé le {objetDate}
Information
En signalant un litige, vous demandez une médiation administrative. L'objet sera gelé jusqu'à résolution du litige par un administrateur.
{error && (
{error}
)}
)}
); return ( {showLabel ? ( ) : ( )} {isOpen && createPortal(modalContent, document.body)} ); }