Files
elink-test-master/TestMasterUI/src/App.jsx
T
2025-02-05 22:32:28 +09:00

164 lines
5.2 KiB
React

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 (
<APIProvider contextPath={options.contextPath}>
<AppContent options={options} showLogin={showLogin} setShowLogin={setShowLogin}/>
</APIProvider>
);
};
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 <LoginDialog open={showLogin} onOpenChange={setShowLogin}/>;
}
const CurrentScreenComponent = SCREENS[currentScreen] || SCREENS['api-tester'];
return (
<LoadTestProvider contextPath={options.contextPath}>
<div className="flex flex-col h-screen bg-background">
<AppMenu onMenuClick={handleMenuClick}/>
<DialogManager
showAddApi={dialogState.showAddApi}
showAddCollection={dialogState.showAddCollection}
showAddScenario={dialogState.showAddScenario}
showVariableModal={dialogState.showVariableModal}
showMockRouteEdit={dialogState.showMockRouteEdit}
showTCPServerEdit={dialogState.showTCPServerEdit}
showQueueEdit={dialogState.showQueueEdit}
showUserEdit={dialogState.showUserEdit}
selectedItem={dialogState.selectedItem}
showPasswordChange={dialogState.showPasswordChange}
showServerEdit={dialogState.showServerEdit}
onDialogChange={handleDialogChange}
/>
<div className="flex-1 mt-14">
<CurrentScreenComponent onMenuClick={handleMenuClick}/>
</div>
</div>
</LoadTestProvider>
);
};
export default App;