From cdbddddaecc51a8f79eef0abc0abb36b5c57102e Mon Sep 17 00:00:00 2001 From: Mathieu Date: Mon, 8 Jun 2026 22:07:10 +0200 Subject: [PATCH] feat: composant SyncHistory Co-Authored-By: Claude Sonnet 4.6 --- src/components/sync/SyncHistory.tsx | 78 +++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/components/sync/SyncHistory.tsx diff --git a/src/components/sync/SyncHistory.tsx b/src/components/sync/SyncHistory.tsx new file mode 100644 index 0000000..00ec2a4 --- /dev/null +++ b/src/components/sync/SyncHistory.tsx @@ -0,0 +1,78 @@ +'use client' +import { useState } from 'react' +import React from 'react' +import type { SyncHistoryEntry } from '@/types/sync' + +interface SyncHistoryProps { + entries: SyncHistoryEntry[] +} + +const STATUS_STYLE = { + success: 'text-green-400', + partial: 'text-yellow-400', + error: 'text-red-400', +} + +export function SyncHistory({ entries }: SyncHistoryProps) { + const [expandedId, setExpandedId] = useState(null) + + if (entries.length === 0) { + return

Aucune synchronisation effectuée.

+ } + + return ( +
+ + + + + + + + + + + + + + {entries.map((entry) => ( + + setExpandedId(expandedId === entry.id ? null : entry.id)} + className="border-t border-slate-800 hover:bg-slate-800/50 cursor-pointer" + > + + + + + + + + + {expandedId === entry.id && ( + + + + )} + + ))} + +
DateUtilisateurCréésMàJDésactivésErreursStatut
+ {new Date(entry.createdAt).toLocaleString('fr-FR', { + day: '2-digit', month: '2-digit', year: '2-digit', + hour: '2-digit', minute: '2-digit', + })} + {entry.userName}{entry.created}{entry.updated}{entry.deactivated}{entry.errors || '—'} + {entry.status} +
+
+ {entry.log.map((l, i) => ( +

+ {l.message} +

+ ))} +
+
+
+ ) +}