diff --git a/src/components/ProcessesViewer.tsx b/src/components/ProcessesViewer.tsx index 03c955f..46d3a39 100644 --- a/src/components/ProcessesViewer.tsx +++ b/src/components/ProcessesViewer.tsx @@ -89,39 +89,105 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe const formatValue = (key: string, value: string | number[] | FileBlob) => { if (isFileBlob(value)) { return ( -
- {key} - -
+ ); } - return JSON.stringify(value || ''); // TODO handle most common cases + return JSON.stringify(value || ''); }; - const formatName = (name: string | number[] | undefined): string => { - if (!name) return "Nom non disponible"; + const getDataIcon = (value: any) => { + if (isFileBlob(value)) return '📄'; + if (typeof value === 'string') return '📝'; + if (typeof value === 'number') return '🔢'; + if (Array.isArray(value)) return '📋'; + if (typeof value === 'boolean') return '✅'; + return '📦'; // object + }; - if (Array.isArray(name)) { - if (name.length === 1 && name[0] === 96) { - return "`"; // Caractère spécial - } - try { - const chars = name.map(code => String.fromCharCode(Number(code))); - return chars.join(''); - } catch (e) { - return "Nom encodé (format non supporté)"; - } - } else if (typeof name === 'string') { - return name; - } + const renderDataField = ( + key: string, + value: any, + hash: string | undefined, + isPrivate: boolean, + processId: string, + stateId: string + ) => { + const isEditing = editingField?.key === key && + editingField?.processId === processId && + editingField?.stateId === stateId; - return "Format de nom inconnu"; + const handleFieldClick = (e: React.MouseEvent) => { + e.stopPropagation(); + e.preventDefault(); + }; + + return ( +
+
+ + {isPrivate ? '🔒' : '🌐'} + + {getDataIcon(value)} + {key} + +
+
+ {isEditing ? ( +
+ {renderEditForm( + key, + value, + async (newValue) => { + await handleFieldUpdate(processId, stateId, key, newValue); + setEditingField(null); + }, + () => setEditingField(null) + )} +
+ ) : ( + <> + {formatValue(key, value)} + {hash && ( +
+ 🔑 +
+ )} + + )} +
+
+ ); }; return (

Processus

-

@@ -132,11 +198,8 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe

{Object.entries(processes).map(([processId, process]) => { - if (isFiltered) { - // skip processes that are not in myProcesses - if (!myProcesses.includes(processId)) { - return; - } + if (isFiltered && !myProcesses.includes(processId)) { + return null; } const isExpanded = expandedBlocks.includes(processId); const stateCount = process.states.length - 1; // We just ignore the last state, which is always empty @@ -161,6 +224,16 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe {process.states.map((state, index) => { if (index === stateCount) return null; + + // Fetch private data if needed + if (myProcesses.includes(processId) && !privateData[state.state_id]) { + console.log('Fetching private data for state:', state.state_id); + fetchPrivateData(processId, state.state_id); + } + + const statePrivateData = privateData[state.state_id] || {}; + console.log(statePrivateData); + return (

État {index + 1}

@@ -170,57 +243,27 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe
Empreinte totale de l'état: {state.state_id}
-
- Empreinte par information: -
    - {Object.entries(state.pcd_commitment).map(([key, value]) => ( -
    - {key}: {value} -
    - ))} -
-
-
-
Données privées
-
- {!myProcesses.includes(processId) ? ( -
- Vous n'avez pas accès aux données privées de ce processus -
- ) : !privateData[state.state_id] ? ( - (() => { - fetchPrivateData(processId, state.state_id); - return
Chargement...
; - })() - ) : Object.keys(privateData[state.state_id]).length > 0 ? ( - Object.entries(privateData[state.state_id]).map(([key, value]) => ( -
- {key}: {formatValue(key, value)} -
- )) +
+ {/* Public Data */} + {Object.entries(state.public_data).map(([key, value]) => + renderDataField(key, value, state.pcd_commitment[key], false, processId, state.state_id) + )} + + {/* Private Data */} + {myProcesses.includes(processId) ? ( + Object.keys(statePrivateData).length > 0 ? ( + Object.entries(statePrivateData).map(([key, value]) => + renderDataField(key, value, state.pcd_commitment[key], true, processId, state.state_id) + ) ) : ( -
- Aucune donnée privée disponible -
- )} -
-
-
-
Données publiques
-
- {Object.keys(state.public_data).length > 0 ? ( - Object.entries(state.public_data).map(([key, value]) => ( -
- {key}: {formatValue(key, value)} -
- )) - ) : ( -
- Aucune donnée publique disponible -
- )} -
+
Chargement des données privées...
+ ) + ) : ( +
+ 🔒 Vous n'avez pas accès aux données privées de ce processus +
+ )}
); @@ -233,7 +276,7 @@ function ProcessesViewer({ processes, myProcesses, onProcessesUpdate }: Processe
); -}; +} ProcessesViewer.displayName = 'ProcessesViewer'; export default memo(ProcessesViewer);