Spaces:
Sleeping
Sleeping
| 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; | |