| import '@/lib/extensions'; |
| import { HashRouter as Router, Routes, Route, useNavigate } from 'react-router-dom' |
| import { useEffect, useState } from 'react' |
| import { useAuthStore } from '@/stores/state' |
| import { navigationService } from '@/services/navigation' |
| import { Toaster } from 'sonner' |
| import App from './App' |
| import LoginPage from '@/features/LoginPage' |
| import ThemeProvider from '@/components/ThemeProvider' |
|
|
| const AppContent = () => { |
| const [initializing, setInitializing] = useState(true) |
| const { isAuthenticated } = useAuthStore() |
| const navigate = useNavigate() |
|
|
| |
| useEffect(() => { |
| navigationService.setNavigate(navigate) |
| }, [navigate]) |
|
|
| |
| useEffect(() => { |
|
|
| const checkAuth = async () => { |
| try { |
| const token = localStorage.getItem('LIGHTRAG-API-TOKEN') |
|
|
| if (token && isAuthenticated) { |
| setInitializing(false); |
| return; |
| } |
|
|
| if (!token) { |
| useAuthStore.getState().logout() |
| } |
| } catch (error) { |
| console.error('Auth initialization error:', error) |
| if (!isAuthenticated) { |
| useAuthStore.getState().logout() |
| } |
| } finally { |
| setInitializing(false) |
| } |
| } |
|
|
| checkAuth() |
|
|
| return () => { |
| } |
| }, [isAuthenticated]) |
|
|
| |
| useEffect(() => { |
| if (!initializing && !isAuthenticated) { |
| const currentPath = window.location.hash.slice(1); |
| if (currentPath !== '/login') { |
| console.log('Not authenticated, redirecting to login'); |
| navigate('/login'); |
| } |
| } |
| }, [initializing, isAuthenticated, navigate]); |
|
|
| |
| if (initializing) { |
| return null |
| } |
|
|
| return ( |
| <Routes> |
| <Route path="/login" element={<LoginPage />} /> |
| <Route |
| path="/*" |
| element={isAuthenticated ? <App /> : null} |
| /> |
| </Routes> |
| ) |
| } |
|
|
| const AppRouter = () => { |
| return ( |
| <ThemeProvider> |
| <Router> |
| <AppContent /> |
| <Toaster |
| position="bottom-center" |
| theme="system" |
| closeButton |
| richColors |
| /> |
| </Router> |
| </ThemeProvider> |
| ) |
| } |
|
|
| export default AppRouter |
|
|