import { Route, Router, RouteSectionProps } from '@solidjs/router' import { Component, Suspense, lazy } from 'solid-js' import { isAuthenticated } from './auth' // Ленивая загрузка компонентов const LoginPage = lazy(() => import('./login')) const AdminPage = lazy(() => import('./admin')) /** * Компонент корневого шаблона приложения * @param props - Свойства маршрута, включающие дочерние элементы */ const RootLayout: Component = (props) => { return (
{/* Здесь может быть общий хедер, футер или другие элементы */} {props.children}
) } /** * Компонент защиты маршрутов * Проверяет авторизацию и либо показывает дочерние элементы, * либо перенаправляет на страницу входа */ const RequireAuth: Component = (props) => { const authed = isAuthenticated() if (!authed) { // Если не авторизован, перенаправляем на /login window.location.href = '/login' return (

Перенаправление на страницу входа...

) } return <>{props.children} } /** * Компонент для публичных маршрутов с редиректом, * если пользователь уже авторизован */ const PublicOnlyRoute: Component = (props) => { // Если пользователь авторизован, перенаправляем на админ-панель if (isAuthenticated()) { window.location.href = '/admin' return (

Перенаправление в админ-панель...

) } return <>{props.children} } /** * Компонент перенаправления с корневого маршрута */ const RootRedirect: Component = () => { const authenticated = isAuthenticated() // Выполняем перенаправление сразу после рендеринга setTimeout(() => { window.location.href = authenticated ? '/admin' : '/login' }, 100) return (

Перенаправление...

) } /** * Корневой компонент приложения с настроенными маршрутами */ const App: Component = () => { return (

Загрузка...

}> {/* Корневой маршрут с перенаправлением */} {/* Маршрут логина (только для неавторизованных) */} {/* Защищенные маршруты (только для авторизованных) */}
) } export default App