2025-06-30 18:25:26 +00:00
|
|
|
|
import { Route, Router } from '@solidjs/router'
|
|
|
|
|
import { lazy, onMount, Suspense } from 'solid-js'
|
|
|
|
|
import { AuthProvider, useAuth } from './context/auth'
|
2025-05-16 06:23:48 +00:00
|
|
|
|
|
|
|
|
|
// Ленивая загрузка компонентов
|
2025-06-30 18:25:26 +00:00
|
|
|
|
const AdminPage = lazy(() => {
|
|
|
|
|
console.log('[App] Loading AdminPage component...')
|
|
|
|
|
return import('./admin')
|
|
|
|
|
})
|
|
|
|
|
const LoginPage = lazy(() => {
|
|
|
|
|
console.log('[App] Loading LoginPage component...')
|
|
|
|
|
return import('./routes/login')
|
|
|
|
|
})
|
2025-05-16 06:23:48 +00:00
|
|
|
|
|
|
|
|
|
/**
|
2025-06-30 18:25:26 +00:00
|
|
|
|
* Компонент защищенного маршрута
|
2025-05-16 06:23:48 +00:00
|
|
|
|
*/
|
2025-06-30 18:25:26 +00:00
|
|
|
|
const ProtectedRoute = () => {
|
|
|
|
|
console.log('[ProtectedRoute] Checking authentication...')
|
|
|
|
|
const auth = useAuth()
|
|
|
|
|
const authenticated = auth.isAuthenticated()
|
|
|
|
|
console.log(
|
|
|
|
|
`[ProtectedRoute] Authentication state: ${authenticated ? 'authenticated' : 'not authenticated'}`
|
|
|
|
|
)
|
2025-06-01 23:56:11 +00:00
|
|
|
|
|
2025-06-30 18:25:26 +00:00
|
|
|
|
if (!authenticated) {
|
|
|
|
|
console.log('[ProtectedRoute] Not authenticated, redirecting to login...')
|
|
|
|
|
// Используем window.location.href для редиректа
|
|
|
|
|
window.location.href = '/login'
|
|
|
|
|
return (
|
|
|
|
|
<div class="loading-screen">
|
|
|
|
|
<div class="loading-spinner" />
|
|
|
|
|
<div>Проверка авторизации...</div>
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
2025-06-01 23:56:11 +00:00
|
|
|
|
|
2025-06-30 18:25:26 +00:00
|
|
|
|
return (
|
|
|
|
|
<Suspense
|
|
|
|
|
fallback={
|
|
|
|
|
<div class="loading-screen">
|
|
|
|
|
<div class="loading-spinner" />
|
|
|
|
|
<div>Загрузка админ-панели...</div>
|
|
|
|
|
</div>
|
2025-05-20 22:34:02 +00:00
|
|
|
|
}
|
2025-06-30 18:25:26 +00:00
|
|
|
|
>
|
|
|
|
|
<AdminPage apiUrl={`${location.origin}/graphql`} />
|
|
|
|
|
</Suspense>
|
|
|
|
|
)
|
|
|
|
|
}
|
2025-05-20 22:34:02 +00:00
|
|
|
|
|
2025-06-30 18:25:26 +00:00
|
|
|
|
/**
|
|
|
|
|
* Корневой компонент приложения
|
|
|
|
|
*/
|
|
|
|
|
const App = () => {
|
|
|
|
|
console.log('[App] Initializing root component...')
|
2025-05-16 06:23:48 +00:00
|
|
|
|
|
2025-06-30 18:25:26 +00:00
|
|
|
|
onMount(() => {
|
|
|
|
|
console.log('[App] Root component mounted')
|
|
|
|
|
})
|
2025-05-16 06:23:48 +00:00
|
|
|
|
|
|
|
|
|
return (
|
2025-06-30 18:25:26 +00:00
|
|
|
|
<AuthProvider>
|
|
|
|
|
<div class="app-container">
|
|
|
|
|
<Router>
|
|
|
|
|
<Route
|
|
|
|
|
path="/login"
|
|
|
|
|
component={() => (
|
|
|
|
|
<Suspense
|
|
|
|
|
fallback={
|
|
|
|
|
<div class="loading-screen">
|
|
|
|
|
<div class="loading-spinner" />
|
|
|
|
|
<div>Загрузка страницы входа...</div>
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
>
|
|
|
|
|
<LoginPage />
|
|
|
|
|
</Suspense>
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
<Route path="/" component={ProtectedRoute} />
|
|
|
|
|
<Route path="/admin" component={ProtectedRoute} />
|
|
|
|
|
<Route path="/admin/:tab" component={ProtectedRoute} />
|
|
|
|
|
</Router>
|
|
|
|
|
</div>
|
|
|
|
|
</AuthProvider>
|
2025-05-16 06:23:48 +00:00
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default App
|