From 8eec5b345579d480c0cdb8d6baac534effac6742 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 11 Jun 2025 20:37:52 +0200 Subject: [PATCH] Filter my processes in processes viewer --- src/App.tsx | 2 +- src/components/ProcessesViewer.tsx | 98 ++++++++++++++++++------------ 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 5742652..1a0b510 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -169,7 +169,7 @@ function App() { {/* Espace pour contenu supplémentaire à droite */}
{/* Affichage des blocs de la blockchain */} - +
diff --git a/src/components/ProcessesViewer.tsx b/src/components/ProcessesViewer.tsx index 2ee4e7b..0b8c671 100644 --- a/src/components/ProcessesViewer.tsx +++ b/src/components/ProcessesViewer.tsx @@ -21,10 +21,16 @@ interface Processes { interface ProcessesViewerProps { processes: Processes | null; + myProcesses: string[]; } -function ProcessesViewer({ processes }: ProcessesViewerProps) { +function ProcessesViewer({ processes, myProcesses }: ProcessesViewerProps) { const [expandedBlocks, setExpandedBlocks] = useState([]); + const [isFiltered, setIsFiltered] = useState(false); + + const handleFilterClick = () => { + setIsFiltered(prev => !prev); + }; // Si pas de données, afficher un message if (!processes || Object.keys(processes).length === 0) { @@ -87,21 +93,30 @@ function ProcessesViewer({ processes }: ProcessesViewerProps) { return (

Processus

+

{Object.keys(processes).length} processus disponible(s)

- {Object.entries(processes).map(([blockId, block]) => { - const isExpanded = expandedBlocks.includes(blockId); - const stateCount = block.states.length; + {Object.entries(processes).map(([processId, process]) => { + if (isFiltered) { + // skip processes that are not in myProcesses + if (!myProcesses.includes(processId)) { + return; + } + } + const isExpanded = expandedBlocks.includes(processId); + const stateCount = process.states.length - 1; // We just ignore the last state, which is always empty // Le premier état est le plus récent return ( -
+
toggleBlock(blockId)} + onClick={() => toggleBlock(processId)} > -
{blockId.substring(0, 8)}...{blockId.substring(blockId.length - 4)}
+
{processId.substring(0, 8)}...{processId.substring(processId.length - 4)}
{stateCount} état(s)
{isExpanded ? '▼' : '▶'}
@@ -109,45 +124,48 @@ function ProcessesViewer({ processes }: ProcessesViewerProps) { {isExpanded && (
- ID complet: {blockId} + ID complet: {processId}
- {block.states.map((state, index) => ( -
-

État {index + 1}

-
- State ID: {state.state_id} -
-
- Commited dans: {state.commited_in} -
- -
-
Données publiques
-
- Nom: {formatName(state.public_data.memberPublicName)} + {process.states.map((state, index) => { + if (index === stateCount - 1) return null; + return ( +
+

État {index + 1}

+
+ State ID: {state.state_id}
- {state.public_data.pairedAddresses && ( +
+ Commited dans: {state.commited_in} +
+ +
+
Données publiques
- Adresses associées: -
    - {Array.isArray(state.public_data.pairedAddresses) ? - (typeof state.public_data.pairedAddresses[0] === 'string' ? ( - (state.public_data.pairedAddresses as string[]).map((addr, i) => ( -
  • {addr}
  • - )) - ) : ( -
  • {formatAddress(state.public_data.pairedAddresses as number[])}
  • - )) : ( -
  • {String(state.public_data.pairedAddresses || '')}
  • - ) - } -
+ Nom: {formatName(state.public_data.memberPublicName)}
- )} + {state.public_data.pairedAddresses && ( +
+ Adresses associées: +
    + {Array.isArray(state.public_data.pairedAddresses) ? + (typeof state.public_data.pairedAddresses[0] === 'string' ? ( + (state.public_data.pairedAddresses as string[]).map((addr, i) => ( +
  • {addr}
  • + )) + ) : ( +
  • {formatAddress(state.public_data.pairedAddresses as number[])}
  • + )) : ( +
  • {String(state.public_data.pairedAddresses || '')}
  • + ) + } +
+
+ )} +
-
- ))} + ); + })}
)}