import { lazy, Suspense } from 'react'; import { Routes, Route, Navigate, useLocation } from 'react-router-dom'; import { useAuthStore } from './store/auth'; import { useBlockingStore } from './store/blocking'; import Layout from './components/layout/Layout'; import PageLoader from './components/common/PageLoader'; import { MaintenanceScreen, ChannelSubscriptionScreen } from './components/blocking'; import { saveReturnUrl } from './utils/token'; import { useAnalyticsCounters } from './hooks/useAnalyticsCounters'; // Auth pages - load immediately (small) import Login from './pages/Login'; import TelegramCallback from './pages/TelegramCallback'; import TelegramRedirect from './pages/TelegramRedirect'; import DeepLinkRedirect from './pages/DeepLinkRedirect'; import VerifyEmail from './pages/VerifyEmail'; import ResetPassword from './pages/ResetPassword'; // User pages - lazy load const Dashboard = lazy(() => import('./pages/Dashboard')); const Subscription = lazy(() => import('./pages/Subscription')); const Balance = lazy(() => import('./pages/Balance')); const Referral = lazy(() => import('./pages/Referral')); const Support = lazy(() => import('./pages/Support')); const Profile = lazy(() => import('./pages/Profile')); const Contests = lazy(() => import('./pages/Contests')); const Polls = lazy(() => import('./pages/Polls')); const Info = lazy(() => import('./pages/Info')); const Wheel = lazy(() => import('./pages/Wheel')); // Admin pages - lazy load (only for admins) const AdminPanel = lazy(() => import('./pages/AdminPanel')); const AdminTickets = lazy(() => import('./pages/AdminTickets')); const AdminSettings = lazy(() => import('./pages/AdminSettings')); const AdminApps = lazy(() => import('./pages/AdminApps')); const AdminWheel = lazy(() => import('./pages/AdminWheel')); const AdminTariffs = lazy(() => import('./pages/AdminTariffs')); const AdminTariffCreate = lazy(() => import('./pages/AdminTariffCreate')); const AdminServers = lazy(() => import('./pages/AdminServers')); const AdminDashboard = lazy(() => import('./pages/AdminDashboard')); const AdminBanSystem = lazy(() => import('./pages/AdminBanSystem')); const AdminBroadcasts = lazy(() => import('./pages/AdminBroadcasts')); const AdminBroadcastCreate = lazy(() => import('./pages/AdminBroadcastCreate')); const AdminPromocodes = lazy(() => import('./pages/AdminPromocodes')); const AdminCampaigns = lazy(() => import('./pages/AdminCampaigns')); const AdminCampaignCreate = lazy(() => import('./pages/AdminCampaignCreate')); const AdminUsers = lazy(() => import('./pages/AdminUsers')); const AdminPayments = lazy(() => import('./pages/AdminPayments')); const AdminPaymentMethods = lazy(() => import('./pages/AdminPaymentMethods')); const AdminPromoOffers = lazy(() => import('./pages/AdminPromoOffers')); const AdminRemnawave = lazy(() => import('./pages/AdminRemnawave')); const AdminEmailTemplates = lazy(() => import('./pages/AdminEmailTemplates')); const AdminUserDetail = lazy(() => import('./pages/AdminUserDetail')); const AdminBroadcastDetail = lazy(() => import('./pages/AdminBroadcastDetail')); const AdminEmailTemplatePreview = lazy(() => import('./pages/AdminEmailTemplatePreview')); function ProtectedRoute({ children }: { children: React.ReactNode }) { const { isAuthenticated, isLoading } = useAuthStore(); const location = useLocation(); if (isLoading) { return ; } if (!isAuthenticated) { // Сохраняем текущий URL для возврата после авторизации saveReturnUrl(); return ; } return {children}; } function AdminRoute({ children }: { children: React.ReactNode }) { const { isAuthenticated, isLoading, isAdmin } = useAuthStore(); const location = useLocation(); if (isLoading) { return ; } if (!isAuthenticated) { // Сохраняем текущий URL для возврата после авторизации saveReturnUrl(); return ; } if (!isAdmin) { return ; } return {children}; } // Suspense wrapper for lazy components function LazyPage({ children }: { children: React.ReactNode }) { return }>{children}; } function BlockingOverlay() { const { blockingType } = useBlockingStore(); if (blockingType === 'maintenance') { return ; } if (blockingType === 'channel_subscription') { return ; } return null; } function App() { useAnalyticsCounters(); return ( <> {/* Public routes */} } /> } /> } /> } /> } /> } /> } /> } /> {/* Protected routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Admin routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Catch all */} } /> ); } export default App;