import React, {useEffect, useState} from 'react'; import {APIProvider, useAPI} from './providers/APIProvider'; import {LoadTestProvider} from './providers/LoadTestProvider'; import DialogManager from '@/components/shared/DialogManager'; import {monacoConfig} from '@/config/monaco.js'; import LoginDialog from '@/components/account/LoginDialog.jsx'; import AppMenu from './components/app-menu/AppMenu'; import {SCREENS} from './config/screenConfig'; window.MonacoEnvironment = monacoConfig; const App = ({options = {contextPath: '/'}}) => { const [showLogin, setShowLogin] = useState(false); return ( ); }; const AppContent = ({options, showLogin, setShowLogin}) => { const {isAuthenticated, setIsAuthenticated, handleLogout} = useAPI(); const [isInitialized, setIsInitialized] = useState(false); const [currentScreen, setCurrentScreen] = useState('api-tester'); const [dialogState, setDialogState] = useState({ showAddApi: false, showAddCollection: false, showAddScenario: false, showVariableModal: false, showMockRouteEdit: false, showTCPServerEdit: false, showQueueEdit: false, showUserEdit: false, showPasswordChange: false, showServerEdit: false, selectedItem: null }); const handleMenuClick = async (action, screen, item = null) => { console.log(action); console.log(item); if (screen) { console.log('Screen:', screen); setCurrentScreen(screen); return; } // Handle modal actions switch (action) { case 'request-add': setDialogState(prev => ({...prev, showAddApi: true})); break; case 'response-add': case 'response-edit': case 'response-clone': setDialogState(prev => ({...prev, showMockRouteEdit: true, selectedItem: item})); break; case 'queue-add': case 'queue-edit': setDialogState(prev => ({...prev, showQueueEdit: true, selectedItem: item})); break; case 'user-add': case 'user-edit': setDialogState(prev => ({...prev, showUserEdit: true, selectedItem: item})); break; case 'socket-add': case 'socket-edit': setDialogState(prev => ({...prev, showTCPServerEdit: true, selectedItem: item})); break; case 'server-add': case 'server-edit': setDialogState(prev => ({...prev, showServerEdit: true, selectedItem: item})); break; case 'collection-add': setDialogState(prev => ({...prev, showAddCollection: true})); break; case 'scenario-add': setDialogState(prev => ({...prev, showAddScenario: true})); break; case 'variables-show': setDialogState(prev => ({...prev, showVariableModal: true})); break; case 'change-password': setDialogState(prev => ({...prev, showPasswordChange: true})); break; case 'logout': const success = await handleLogout(); if (success) { window.location.href = `${options.contextPath}/actionLogout.do`; } break; } }; const checkAuth = async () => { try { const response = await fetch('/api/account', {}); if (response.status !== 200) { setShowLogin(true); setIsAuthenticated(false); return; } const data = await response.json(); setIsAuthenticated(!!data.authorities); if (!data.authorities) { setShowLogin(true); } } catch (error) { console.error('Auth check failed:', error); setShowLogin(true); setIsAuthenticated(false); } }; useEffect(() => { if (!isInitialized) { setIsInitialized(true); checkAuth(); } }, [isInitialized, checkAuth]); const handleDialogChange = (dialogName, isOpen) => { setDialogState(prev => ({...prev, [dialogName]: isOpen})); }; if (!isAuthenticated) { return ; } const CurrentScreenComponent = SCREENS[currentScreen] || SCREENS['api-tester']; return (
); }; export default App;