Compare commits
No commits in common. "8eec5b345579d480c0cdb8d6baac534effac6742" and "74ae167e3cfeb9805bc92eff8155d07a34e2d005" have entirely different histories.
8eec5b3455
...
74ae167e3c
31
src/App.tsx
31
src/App.tsx
@ -23,7 +23,6 @@ function App() {
|
|||||||
const [showAuthModal, setShowAuthModal] = useState(false)
|
const [showAuthModal, setShowAuthModal] = useState(false)
|
||||||
const [showFolderModal, setShowFolderModal] = useState(false)
|
const [showFolderModal, setShowFolderModal] = useState(false)
|
||||||
const [processes, setProcesses] = useState<any>(null)
|
const [processes, setProcesses] = useState<any>(null)
|
||||||
const [myProcesses, setMyProcesses] = useState<string[]>([])
|
|
||||||
const [userPairingId, setUserPairingId] = useState<string | null>(null)
|
const [userPairingId, setUserPairingId] = useState<string | null>(null)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -40,22 +39,28 @@ function App() {
|
|||||||
messageBus.isReady().then(() => {
|
messageBus.isReady().then(() => {
|
||||||
messageBus.getProcesses().then((processes: any) => {
|
messageBus.getProcesses().then((processes: any) => {
|
||||||
setProcesses(processes);
|
setProcesses(processes);
|
||||||
|
|
||||||
|
for (const key of Object.keys(processes)) {
|
||||||
|
try {
|
||||||
|
const process = processes[key];
|
||||||
|
if (Object.keys(process.states?.[0]?.keys).length === 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
console.log(key);
|
||||||
|
console.log(process);
|
||||||
|
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to retrieve data:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [isConnected, iframeUrl]);
|
}, [isConnected, iframeUrl]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (isConnected && processes !== null) {
|
|
||||||
const messageBus = MessageBus.getInstance(iframeUrl);
|
|
||||||
messageBus.isReady().then(() => {
|
|
||||||
messageBus.getMyProcesses().then((res: string[]) => {
|
|
||||||
setMyProcesses(res);
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, [isConnected, processes]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isConnected && userPairingId === null) {
|
if (isConnected && userPairingId === null) {
|
||||||
const messageBus = MessageBus.getInstance(iframeUrl);
|
const messageBus = MessageBus.getInstance(iframeUrl);
|
||||||
@ -169,7 +174,7 @@ function App() {
|
|||||||
{/* Espace pour contenu supplémentaire à droite */}
|
{/* Espace pour contenu supplémentaire à droite */}
|
||||||
<div className="content-area">
|
<div className="content-area">
|
||||||
{/* Affichage des blocs de la blockchain */}
|
{/* Affichage des blocs de la blockchain */}
|
||||||
<BlockchainViewer processes={processes} myProcesses={myProcesses}/>
|
<BlockchainViewer processes={processes} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -21,16 +21,10 @@ interface Processes {
|
|||||||
|
|
||||||
interface ProcessesViewerProps {
|
interface ProcessesViewerProps {
|
||||||
processes: Processes | null;
|
processes: Processes | null;
|
||||||
myProcesses: string[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function ProcessesViewer({ processes, myProcesses }: ProcessesViewerProps) {
|
function ProcessesViewer({ processes }: ProcessesViewerProps) {
|
||||||
const [expandedBlocks, setExpandedBlocks] = useState<string[]>([]);
|
const [expandedBlocks, setExpandedBlocks] = useState<string[]>([]);
|
||||||
const [isFiltered, setIsFiltered] = useState<boolean>(false);
|
|
||||||
|
|
||||||
const handleFilterClick = () => {
|
|
||||||
setIsFiltered(prev => !prev);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Si pas de données, afficher un message
|
// Si pas de données, afficher un message
|
||||||
if (!processes || Object.keys(processes).length === 0) {
|
if (!processes || Object.keys(processes).length === 0) {
|
||||||
@ -93,30 +87,21 @@ function ProcessesViewer({ processes, myProcesses }: ProcessesViewerProps) {
|
|||||||
return (
|
return (
|
||||||
<div className="processes-viewer">
|
<div className="processes-viewer">
|
||||||
<h2>Processus</h2>
|
<h2>Processus</h2>
|
||||||
<button onClick = {handleFilterClick}>
|
|
||||||
{isFiltered ? 'Show All Processes' : 'Filter Processes'}
|
|
||||||
</button>
|
|
||||||
<p className="block-count">{Object.keys(processes).length} processus disponible(s)</p>
|
<p className="block-count">{Object.keys(processes).length} processus disponible(s)</p>
|
||||||
|
|
||||||
<div className="block-list">
|
<div className="block-list">
|
||||||
{Object.entries(processes).map(([processId, process]) => {
|
{Object.entries(processes).map(([blockId, block]) => {
|
||||||
if (isFiltered) {
|
const isExpanded = expandedBlocks.includes(blockId);
|
||||||
// skip processes that are not in myProcesses
|
const stateCount = block.states.length;
|
||||||
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
|
// Le premier état est le plus récent
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div key={processId} className="block-item">
|
<div key={blockId} className="block-item">
|
||||||
<div
|
<div
|
||||||
className={`block-header ${isExpanded ? 'expanded' : ''}`}
|
className={`block-header ${isExpanded ? 'expanded' : ''}`}
|
||||||
onClick={() => toggleBlock(processId)}
|
onClick={() => toggleBlock(blockId)}
|
||||||
>
|
>
|
||||||
<div className="block-id">{processId.substring(0, 8)}...{processId.substring(processId.length - 4)}</div>
|
<div className="block-id">{blockId.substring(0, 8)}...{blockId.substring(blockId.length - 4)}</div>
|
||||||
<div className="block-state-count">{stateCount} état(s)</div>
|
<div className="block-state-count">{stateCount} état(s)</div>
|
||||||
<div className="block-toggle">{isExpanded ? '▼' : '▶'}</div>
|
<div className="block-toggle">{isExpanded ? '▼' : '▶'}</div>
|
||||||
</div>
|
</div>
|
||||||
@ -124,48 +109,45 @@ function ProcessesViewer({ processes, myProcesses }: ProcessesViewerProps) {
|
|||||||
{isExpanded && (
|
{isExpanded && (
|
||||||
<div className="block-details">
|
<div className="block-details">
|
||||||
<div className="block-complete-id">
|
<div className="block-complete-id">
|
||||||
<strong>ID complet:</strong> {processId}
|
<strong>ID complet:</strong> {blockId}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{process.states.map((state, index) => {
|
{block.states.map((state, index) => (
|
||||||
if (index === stateCount - 1) return null;
|
<div key={`${blockId}-state-${index}`} className="state-item">
|
||||||
return (
|
<h4>État {index + 1}</h4>
|
||||||
<div key={`${processId}-state-${index}`} className="state-item">
|
<div className="state-detail">
|
||||||
<h4>État {index + 1}</h4>
|
<strong>State ID:</strong> {state.state_id}
|
||||||
<div className="state-detail">
|
|
||||||
<strong>State ID:</strong> {state.state_id}
|
|
||||||
</div>
|
|
||||||
<div className="state-detail">
|
|
||||||
<strong>Commited dans:</strong> {state.commited_in}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="state-public-data">
|
|
||||||
<h5>Données publiques</h5>
|
|
||||||
<div className="public-data-item">
|
|
||||||
<strong>Nom:</strong> {formatName(state.public_data.memberPublicName)}
|
|
||||||
</div>
|
|
||||||
{state.public_data.pairedAddresses && (
|
|
||||||
<div className="public-data-item">
|
|
||||||
<strong>Adresses associées:</strong>
|
|
||||||
<ul className="address-list">
|
|
||||||
{Array.isArray(state.public_data.pairedAddresses) ?
|
|
||||||
(typeof state.public_data.pairedAddresses[0] === 'string' ? (
|
|
||||||
(state.public_data.pairedAddresses as string[]).map((addr, i) => (
|
|
||||||
<li key={i}>{addr}</li>
|
|
||||||
))
|
|
||||||
) : (
|
|
||||||
<li>{formatAddress(state.public_data.pairedAddresses as number[])}</li>
|
|
||||||
)) : (
|
|
||||||
<li>{String(state.public_data.pairedAddresses || '')}</li>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
<div className="state-detail">
|
||||||
})}
|
<strong>Commited dans:</strong> {state.commited_in}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="state-public-data">
|
||||||
|
<h5>Données publiques</h5>
|
||||||
|
<div className="public-data-item">
|
||||||
|
<strong>Nom:</strong> {formatName(state.public_data.memberPublicName)}
|
||||||
|
</div>
|
||||||
|
{state.public_data.pairedAddresses && (
|
||||||
|
<div className="public-data-item">
|
||||||
|
<strong>Adresses associées:</strong>
|
||||||
|
<ul className="address-list">
|
||||||
|
{Array.isArray(state.public_data.pairedAddresses) ?
|
||||||
|
(typeof state.public_data.pairedAddresses[0] === 'string' ? (
|
||||||
|
(state.public_data.pairedAddresses as string[]).map((addr, i) => (
|
||||||
|
<li key={i}>{addr}</li>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<li>{formatAddress(state.public_data.pairedAddresses as number[])}</li>
|
||||||
|
)) : (
|
||||||
|
<li>{String(state.public_data.pairedAddresses || '')}</li>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -228,41 +228,6 @@ export default class MessageBus {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public getMyProcesses(): Promise<string[]> {
|
|
||||||
return new Promise<string[]>((resolve: (myProcesses: string[]) => void, reject: (error: string) => void) => {
|
|
||||||
this.checkToken().then(() => {
|
|
||||||
const userStore = UserStore.getInstance();
|
|
||||||
const accessToken = userStore.getAccessToken()!;
|
|
||||||
|
|
||||||
const correlationId = uuidv4();
|
|
||||||
this.initMessageListener(correlationId);
|
|
||||||
|
|
||||||
const unsubscribe = EventBus.getInstance().on('GET_MY_PROCESSES', (responseId: string, myProcesses: string[]) => {
|
|
||||||
if (responseId !== correlationId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
unsubscribe();
|
|
||||||
this.destroyMessageListener();
|
|
||||||
resolve(myProcesses);
|
|
||||||
});
|
|
||||||
|
|
||||||
const unsubscribeError = EventBus.getInstance().on('ERROR_GET_MY_PROCESSES', (responseId: string, error: string) => {
|
|
||||||
if (responseId !== correlationId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
unsubscribeError();
|
|
||||||
this.destroyMessageListener();
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.sendMessage({
|
|
||||||
type: 'GET_MY_PROCESSES',
|
|
||||||
accessToken,
|
|
||||||
});
|
|
||||||
}).catch(console.error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public getData(processId: string, stateId: string): Promise<any> {
|
public getData(processId: string, stateId: string): Promise<any> {
|
||||||
return new Promise<any>((resolve: (data: any) => void, reject: (error: string) => void) => {
|
return new Promise<any>((resolve: (data: any) => void, reject: (error: string) => void) => {
|
||||||
this.checkToken().then(() => {
|
this.checkToken().then(() => {
|
||||||
@ -479,16 +444,6 @@ export default class MessageBus {
|
|||||||
EventBus.getInstance().emit('PROCESSES_RETRIEVED', correlationId, message.processes);
|
EventBus.getInstance().emit('PROCESSES_RETRIEVED', correlationId, message.processes);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'GET_MY_PROCESSES':
|
|
||||||
if (this.errors[correlationId]) {
|
|
||||||
const error = this.errors[correlationId];
|
|
||||||
delete this.errors[correlationId];
|
|
||||||
EventBus.getInstance().emit('ERROR_GET_MY_PROCESSES', correlationId, error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
EventBus.getInstance().emit('GET_MY_PROCESSES', correlationId, message.myProcesses);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'PROFILE_CREATED': // CREATE_PROFILE
|
case 'PROFILE_CREATED': // CREATE_PROFILE
|
||||||
if (this.errors[correlationId]) {
|
if (this.errors[correlationId]) {
|
||||||
const error = this.errors[correlationId];
|
const error = this.errors[correlationId];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user