File size: 2,246 Bytes
f9b14ab 270cb30 578ed1a c114561 11b4cc9 4421a58 11b4cc9 f9b14ab 270cb30 f9b14ab 270cb30 9564069 578ed1a 382e628 270cb30 382e628 270cb30 6fd7cb8 270cb30 382e628 9564069 270cb30 6fd7cb8 270cb30 6fd7cb8 270cb30 382e628 270cb30 578ed1a 270cb30 9564069 270cb30 578ed1a f9b14ab 9564069 f9b14ab 11b4cc9 4421a58 c9b5d82 f9b14ab 1933c59 c9b5d82 4421a58 11b4cc9 |
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 |
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()
// Set navigate function for navigation service
useEffect(() => {
navigationService.setNavigate(navigate)
}, [navigate])
// Token validity check
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])
// Redirect effect for protected routes
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]);
// Show nothing while initializing
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
|