From 4740f4a67c66802c98883f25d6b9163d09b8e013 Mon Sep 17 00:00:00 2001 From: omaroughriss Date: Thu, 19 Jun 2025 20:59:35 +0200 Subject: [PATCH] Add all fields in state render --- src/components/ProcessesViewer.tsx | 125 +++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 15 deletions(-) diff --git a/src/components/ProcessesViewer.tsx b/src/components/ProcessesViewer.tsx index 77fa2b9..afd30d4 100644 --- a/src/components/ProcessesViewer.tsx +++ b/src/components/ProcessesViewer.tsx @@ -26,6 +26,81 @@ interface ProcessesViewerProps { onProcessesUpdate?: (processes: Processes) => void; } +const compareStates = ( + currentState: BlockState, + index: number, + previousState?: BlockState, + currentPrivateData?: Record, + previousPrivateData?: Record +) => { + const result: Record = {}; + + // Ajouter toutes les données publiques de l'état actuel + Object.keys(currentState.public_data).forEach(key => { + const currentValue = currentState.public_data[key]; + const previousValue = previousState?.public_data[key]; + const isModified = index > 0 && + previousValue !== undefined && + JSON.stringify(currentValue) !== JSON.stringify(previousValue); + + result[key] = { + value: currentValue, + status: isModified ? 'modified' : 'unchanged', + hash: currentState.pcd_commitment[key], + isPrivate: false, + stateId: currentState.state_id + }; + }); + + // Gérer les données privées + if (index === 0) { + // Pour le premier état, on ajoute simplement les données privées actuelles + if (currentPrivateData) { + Object.entries(currentPrivateData).forEach(([key, value]) => { + result[key] = { + value, + status: 'unchanged', + hash: currentState.pcd_commitment[key], + isPrivate: true, + stateId: currentState.state_id + }; + }); + } + } else if (previousPrivateData) { + // Pour les états suivants, on commence par les données privées de l'état précédent + Object.entries(previousPrivateData).forEach(([key, value]) => { + result[key] = { + value, + status: 'unchanged', + hash: previousState?.pcd_commitment[key], + isPrivate: true, + stateId: previousState!.state_id + }; + }); + + // Puis on met à jour les données privées qui ont changé + if (currentPrivateData) { + Object.entries(currentPrivateData).forEach(([key, value]) => { + result[key] = { + value, + status: 'modified', + hash: currentState.pcd_commitment[key], + isPrivate: true, + stateId: currentState.state_id + }; + }); + } + } + + return result; +}; + function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: ProcessesViewerProps) { const [expandedBlocks, setExpandedBlocks] = useState([]); const [isFiltered, setIsFiltered] = useState(false); @@ -310,16 +385,26 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe hash: string | undefined, isPrivate: boolean, processId: string, - stateId: string + stateId: string, + status: 'unchanged' | 'modified' = 'unchanged', + originStateId?: string ) => { const isEditing = editingField?.key === key && editingField?.processId === processId && editingField?.stateId === stateId; + const getStatusColor = (status: string) => { + return status === 'modified' ? '#32a852' : 'transparent'; + }; + return (
@@ -327,6 +412,11 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe {getDataIcon(value)} {key} + {originStateId && originStateId !== stateId && ( + + ↺ + + )}