import { useState, useEffect, useCallback } from 'react' import './App.css' import MessageConsole from './components/MessageConsole' import ControlPanel from './components/ControlPanel' import ProfileModal from './components/ProfileModal' import AuthModal from './sdk/AuthModal'; import MessageBus from './sdk/MessageBus'; import EventBus from './sdk/EventBus'; import UserStore from './sdk/UserStrore'; import Iframe from './sdk/Iframe' import BlockchainViewer from './components/ProcessesViewer'; import FolderModal from './components/FolderModal'; import type { ProfileData } from './sdk/models/ProfileData' import type { FolderData } from './sdk/models/FolderData' const iframeUrl = 'https://dev3.4nkweb.com' function App() { const [receivedMessages, setReceivedMessages] = useState<{ timestamp: string; data: any }[]>([]) const [isConnected, setIsConnected] = useState(false) const [showProfileModal, setShowProfileModal] = useState(false) const [showAuthModal, setShowAuthModal] = useState(false) const [showFolderModal, setShowFolderModal] = useState(false) const [processes, setProcesses] = useState(null) const [myProcesses, setMyProcesses] = useState([]) const [userPairingId, setUserPairingId] = useState(null) useEffect(() => { setIsConnected(UserStore.getInstance().isConnected()); }); useEffect(() => { setUserPairingId(UserStore.getInstance().getUserPairingId()); }); useEffect(() => { if (isConnected) { const messageBus = MessageBus.getInstance(iframeUrl); messageBus.isReady().then(() => { messageBus.getProcesses().then((processes: any) => { setProcesses(processes); }); }); } }, [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(() => { if (isConnected && userPairingId === null) { const messageBus = MessageBus.getInstance(iframeUrl); messageBus.isReady().then(() => { messageBus.getUserPairingId().then((userPairingId: string) => { UserStore.getInstance().pair(userPairingId); setUserPairingId(UserStore.getInstance().getUserPairingId()); }) }); } }, [isConnected, userPairingId]); // Gestionnaire pour afficher la modale de connexion const handleLogin = useCallback(() => { // Afficher la modale de connexion setShowAuthModal(true); }, []); // Gestionnaire pour la déconnexion const handleLogout = useCallback(() => { // Déconnecter l'utilisateur UserStore.getInstance().disconnect(); setIsConnected(false); // Émettre un événement pour vider aussi les messages locaux dans MessageConsole EventBus.getInstance().emit('CLEAR_CONSOLE'); // Vider les processes setProcesses(null); }, []); // Gestionnaire pour ouvrir la modale de profil const handleOpenProfileModal = useCallback(() => { setShowProfileModal(true); }, []); // Gestionnaire pour ouvrir la modale de création de dossier const handleOpenFolderModal = useCallback(() => { setShowFolderModal(true); }, []); // Gestionnaire pour fermer la modale de création de dossier const handleCloseFolderModal = useCallback(() => { setShowFolderModal(false); }, []); // Gestionnaire pour fermer la modale de création de profil const handleCloseProfileModal = useCallback(() => { setShowProfileModal(false); }, []); // Gestionnaire pour soumettre les données du profil const handleProfileSubmit = useCallback((profileData: ProfileData) => { // Ajouter le validator fixe aux données du profil const completeProfileData = { ...profileData, validator: '884cb36a346a79af8697559f16940141f068bdf1656f88fa0df0e9ecd7311fb8:0' }; MessageBus.getInstance(iframeUrl).createProfile(completeProfileData).then((_profileData: ProfileData) => { MessageBus.getInstance(iframeUrl).getProcesses().then((processes: any) => { setProcesses(processes); }); }); setShowProfileModal(false); }, []); // Gestionnaire pour soumettre les données du dossier const handleFolderSubmit = useCallback((folderData: FolderData) => { MessageBus.getInstance(iframeUrl).createFolder(folderData).then((_folderData: FolderData) => { MessageBus.getInstance(iframeUrl).getProcesses().then((processes: any) => { setProcesses(processes); }); }); setShowFolderModal(false); }, []); // Gestionnaire du clic sur le bouton Vider les messages const handleClearMessages = useCallback(() => { setReceivedMessages([]); }, []); return (

[4NK]

{/* Panneau de contrôle avec iframe */} {/* Structure flexible avec console à gauche et contenu à droite */}
{/* Console de messages (largeur fixe à gauche) */} {/* Espace pour contenu supplémentaire à droite */}
{/* Affichage des blocs de la blockchain */}
{/* Modales */} {showAuthModal && ( { setIsConnected(true); setShowAuthModal(false); }} onClose={() => setShowAuthModal(false)} iframeUrl={iframeUrl} /> )} {showProfileModal && ( )} {showFolderModal && ( )} {/* N'afficher l'iframe que si l'utilisateur est connecté */} {isConnected &&