import React, { useState, useEffect } from 'react'; import { ScrollText, RefreshCw, Clock, User, ChevronDown, ChevronUp, CheckCircle2, XCircle, Loader, } from 'lucide-react'; import { getDeployments } from '../utils/api'; import StatusBadge from '../components/StatusBadge'; function formatDate(dateStr) { if (!dateStr) return 'N/A'; try { return new Date(dateStr).toLocaleString('fr-FR'); } catch { return dateStr; } } function DeploymentEntry({ deployment }) { const [expanded, setExpanded] = useState(false); const statusIcon = { success: , failed: , running: , }; return (
setExpanded(!expanded)} >
{statusIcon[deployment.status] || statusIcon.running}

{deployment.message}

{formatDate(deployment.timestamp)} {deployment.user && ( {deployment.user} )} {deployment.duration && ( Durée: {deployment.duration}s )}
{expanded ? ( ) : ( )}
{expanded && deployment.logs && (
              {deployment.logs}
            
)}
); } export default function DeploymentsPage() { const [deployments, setDeployments] = useState([]); const [loading, setLoading] = useState(true); const fetchDeployments = async () => { setLoading(true); try { const res = await getDeployments(); setDeployments(res.data); } catch (err) { console.error('Erreur chargement déploiements:', err); } finally { setLoading(false); } }; useEffect(() => { fetchDeployments(); const interval = setInterval(fetchDeployments, 10000); return () => clearInterval(interval); }, []); return (
{/* Header */}

Historique des déploiements

Consultez les logs des derniers déploiements

{/* Deployments List */} {loading && deployments.length === 0 ? (

Chargement...

) : deployments.length === 0 ? (

Aucun déploiement

L'historique des déploiements apparaîtra ici après le premier redéploiement

) : (
{deployments.map((d) => ( ))}
)}
); }