import React, { useState, useRef } from 'react';
import { createPortal } from 'react-dom';
// ─── Confirmation Dialog ──────────────────────────────────────────────────────
function ConfirmDialog({ isOpen, title, message, confirmLabel, confirmColor, onConfirm, onCancel, icon }) {
if (!isOpen) return null;
return createPortal(
{/* ──── Statut badge ──── */}
{/* ──── ÉTAT 1: Actions valider / rejeter ──── */}
{isEnAttente && (
)}
{/* ──── ÉTAT 2: Restitution disponible ──── */}
{isValideEnAttenteRestitution && (
Réclamation validée — en attente de remise physique.
)}
{/* ──── ÉTAT 3: Clôturé ──── */}
{isClosed && (() => {
const isValide = statut === 'validé';
const isCloture = statut === 'clôturé';
const isRestitue = statut === 'restitué';
const color = isValide || isRestitue ? '#15803d' : isCloture ? '#475569' : '#b91c1c';
const bg = isValide || isRestitue ? '#f0fdf4' : isCloture ? '#f1f5f9' : '#fef2f2';
const border = isValide || isRestitue ? '#28a745' : isCloture ? '#94a3b8' : '#dc3545';
const icon = isValide ? 'fa-check-circle' : isRestitue ? 'fa-handshake' : isCloture ? 'fa-archive' : 'fa-times-circle';
const title = isValide ? 'Réclamation validée' : isRestitue ? 'Restitution effectuée' : isCloture ? 'Demande clôturée automatiquement' : 'Demande refusée';
const desc = isCloture
? "L'objet a été attribué à une autre personne. Votre demande a été clôturée automatiquement."
: `Cette demande a été marquée comme ${reclamationStatut?.toUpperCase()}.`;
return (
);
})()}
{/* ──── Séparateur ──── */}
Signaler un problème
{/* ──── Confirm Dialogs ──── */}
{ setConfirm(null); submitValidate(); }}
onCancel={() => setConfirm(null)}
/>
{ setConfirm(null); submitReject(); }}
onCancel={() => setConfirm(null)}
/>
{/* ──── Restitution Modal ──── */}
setShowRestitution(false)}
submitUrl={restituerUrl}
objetTitre={objetTitre}
objetImage={objetImage}
objetReference={objetReference}
csrfToken={csrfRestituer}
/>
{/* ──── Litige Modal ──── */}
{showLitige && createPortal(
{ if (e.target === e.currentTarget) setShowLitige(false); }}>
Signaler un litige
Demande de médiation administrative
{litigeSuccess ? (
Signalement envoyé
Votre litige a été transmis aux administrateurs.
) : (
)}
,
document.body
)}
);
}