Spaces:
Running
Running
File size: 3,396 Bytes
2b3e7b8 eea1434 b7dce4c 36deb6e a3ae13f f97c4c9 5807365 36deb6e a3ae13f 2b3e7b8 36deb6e 2b3e7b8 a3ae13f 2b3e7b8 e6ba1a2 dd07b04 e6ba1a2 f97c4c9 2b3e7b8 a3ae13f 2b3e7b8 36deb6e b7dce4c 6f5db33 e6ba1a2 6f5db33 e6ba1a2 6f5db33 b7dce4c e6ba1a2 b7dce4c e6ba1a2 b7dce4c 00f7e20 b7dce4c 5807365 b7dce4c 2b3e7b8 36deb6e b7dce4c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | import React, { useState, useEffect } from 'react';
import { ThemeProvider } from './contexts/ThemeContext';
import { AppConfigProvider } from './contexts/AppConfigContext';
import HomePage from './pages/HomePage';
import ChatPage from './pages/ChatPage';
import AuthPage from './pages/AuthPage';
import CanvasPage from './pages/CanvasPage';
import UserGuide from './components/UserGuide';
import './styles/components.css';
function App() {
const [currentView, setCurrentView] = useState('home');
const [isAuthenticated, setIsAuthenticated] = useState(false);
const [user, setUser] = useState(null);
const [authToken, setAuthToken] = useState(null);
// Check for existing authentication on app start
useEffect(() => {
const token = localStorage.getItem('authToken');
const userData = localStorage.getItem('user');
if (token && userData) {
try {
const parsedUser = JSON.parse(userData);
setAuthToken(token);
setUser(parsedUser);
setIsAuthenticated(true);
setCurrentView('chat');
} catch (error) {
// Clear invalid data
localStorage.removeItem('authToken');
localStorage.removeItem('user');
}
}
}, []);
const navigateToAuth = () => {
setCurrentView('auth');
};
const navigateToCanvas = (canvasView) => {
if (['insights', 'workspace', 'deliverables'].includes(canvasView)) {
localStorage.setItem('canvas-view-v2', canvasView);
}
setCurrentView('canvas');
};
const navigateToChat = () => {
setCurrentView('chat');
};
const navigateToHome = () => {
setCurrentView('home');
};
const handleAuthSuccess = (userData, token) => {
setUser(userData);
setAuthToken(token);
setIsAuthenticated(true);
setCurrentView('chat');
};
const handleSignOut = () => {
localStorage.removeItem('authToken');
localStorage.removeItem('user');
setUser(null);
setAuthToken(null);
setIsAuthenticated(false);
setCurrentView('home');
};
return (
<AppConfigProvider>
<ThemeProvider>
<div className="App">
{currentView === 'home' && (
<HomePage
onNavigateToHome={navigateToHome}
onNavigateToChat={isAuthenticated ? navigateToChat : navigateToAuth}
onNavigateToCanvas={isAuthenticated ? navigateToCanvas : navigateToAuth}
isAuthenticated={isAuthenticated}
/>
)}
{currentView === 'auth' && (
<AuthPage onAuthSuccess={handleAuthSuccess} />
)}
{currentView === 'canvas' && isAuthenticated && (
<CanvasPage
user={user}
authToken={authToken}
onNavigateToHome={navigateToHome}
onNavigateToChat={navigateToChat}
onSignOut={handleSignOut}
/>
)}
{currentView === 'chat' && isAuthenticated && (
<ChatPage
user={user}
authToken={authToken}
onNavigateToHome={navigateToHome}
onNavigateToCanvas={navigateToCanvas}
onSignOut={handleSignOut}
/>
)}
{/* Global help center — listens for the 'open-user-guide' event */}
<UserGuide />
</div>
</ThemeProvider>
</AppConfigProvider>
);
}
export default App;
|