|
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 |
|
|