core/panel/App.tsx

91 lines
2.4 KiB
TypeScript
Raw Normal View History

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