2026-09-19 21:53:35 +03:00
|
|
|
import { createBrowserRouter, Navigate } from 'react-router';
|
|
|
|
|
|
|
|
|
|
import { AuthGuard } from '@/components/AuthGuard';
|
|
|
|
|
import {
|
2026-09-19 23:32:11 +03:00
|
|
|
AccountSettingsLayout,
|
2026-09-19 21:53:35 +03:00
|
|
|
AppearanceSettingsPage,
|
|
|
|
|
AppLayout,
|
|
|
|
|
IndexRedirect,
|
2026-09-20 01:39:04 +03:00
|
|
|
FriendsPage,
|
2026-09-21 19:25:06 +03:00
|
|
|
InvitePage,
|
2026-09-19 21:53:35 +03:00
|
|
|
GuildView,
|
|
|
|
|
InstanceSettingsPage,
|
|
|
|
|
LoginPage,
|
|
|
|
|
NoGuildView,
|
|
|
|
|
OnboardingPage,
|
|
|
|
|
ProfileSettingsPage,
|
2026-09-20 11:24:09 +03:00
|
|
|
ProfileServerTab,
|
2026-09-19 21:53:35 +03:00
|
|
|
RegisterPage,
|
|
|
|
|
SecuritySettingsPage,
|
|
|
|
|
SettingsLayout,
|
|
|
|
|
StatusPage,
|
|
|
|
|
} from '@/pages/lazyPages';
|
|
|
|
|
|
|
|
|
|
/** Таблица маршрутов: публичные страницы, защищённые и настройки. */
|
|
|
|
|
export const routes = [
|
|
|
|
|
{
|
|
|
|
|
path: '/',
|
|
|
|
|
children: [
|
|
|
|
|
{ index: true, element: <IndexRedirect /> },
|
|
|
|
|
{ path: 'login', element: <LoginPage /> },
|
|
|
|
|
{ path: 'register', element: <RegisterPage /> },
|
|
|
|
|
{ path: 'status', element: <StatusPage /> },
|
2026-09-21 19:25:06 +03:00
|
|
|
// Страница приглашения: доступна без входа, гость видит предпросмотр.
|
|
|
|
|
{ path: 'invite/:code', element: <InvitePage /> },
|
2026-09-19 21:53:35 +03:00
|
|
|
{
|
|
|
|
|
element: <AuthGuard allowIncompleteOnboarding />,
|
|
|
|
|
children: [{ path: 'onboarding', element: <OnboardingPage /> }],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
element: <AuthGuard />,
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: 'app',
|
|
|
|
|
element: <AppLayout />,
|
|
|
|
|
children: [
|
|
|
|
|
{ index: true, element: <Navigate to="empty" replace /> },
|
|
|
|
|
{ path: 'empty', element: <NoGuildView /> },
|
2026-09-20 01:39:04 +03:00
|
|
|
// Раздел друзей: статические сегменты выше динамических,
|
|
|
|
|
// поэтому `friends` не перехватывается маршрутом `:guildId`.
|
|
|
|
|
{ path: 'friends', element: <FriendsPage /> },
|
|
|
|
|
{ path: 'friends/:channelId', element: <FriendsPage /> },
|
2026-09-19 21:53:35 +03:00
|
|
|
{ path: ':guildId', element: <GuildView /> },
|
|
|
|
|
{ path: ':guildId/:channelId', element: <GuildView /> },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
element: <AuthGuard allowIncompleteOnboarding />,
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: 'settings',
|
|
|
|
|
element: <SettingsLayout />,
|
|
|
|
|
children: [
|
2026-09-19 23:32:11 +03:00
|
|
|
{ index: true, element: <Navigate to="/settings/account/profile" replace /> },
|
|
|
|
|
{
|
|
|
|
|
// Настройки аккаунта и инстанса: /settings/account/*
|
|
|
|
|
path: 'account',
|
|
|
|
|
element: <AccountSettingsLayout />,
|
|
|
|
|
children: [
|
|
|
|
|
{ index: true, element: <Navigate to="profile" replace /> },
|
|
|
|
|
{ path: 'profile', element: <ProfileSettingsPage /> },
|
|
|
|
|
{ path: 'security', element: <SecuritySettingsPage /> },
|
|
|
|
|
{ path: 'appearance', element: <AppearanceSettingsPage /> },
|
|
|
|
|
{ path: 'instance', element: <InstanceSettingsPage /> },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// Настройки пользовательских серверов: /settings/servers/:guildId
|
2026-09-20 11:24:09 +03:00
|
|
|
{ path: 'servers', element: <ProfileServerTab /> },
|
|
|
|
|
{ path: 'servers/:guildId', element: <ProfileServerTab /> },
|
2026-09-19 23:32:11 +03:00
|
|
|
// Старые пути Фазы 1: закладки и внешние ссылки продолжают работать.
|
|
|
|
|
{ path: 'profile', element: <Navigate to="/settings/account/profile" replace /> },
|
|
|
|
|
{ path: 'security', element: <Navigate to="/settings/account/security" replace /> },
|
|
|
|
|
{
|
|
|
|
|
path: 'appearance',
|
|
|
|
|
element: <Navigate to="/settings/account/appearance" replace />,
|
|
|
|
|
},
|
|
|
|
|
{ path: 'instance', element: <Navigate to="/settings/account/instance" replace /> },
|
2026-09-19 21:53:35 +03:00
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{ path: '*', element: <Navigate to="/" replace /> },
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export const router = createBrowserRouter(routes);
|