import { lazy, Suspense } from 'react' import { Routes, Route, Navigate, useLocation } from 'react-router-dom' import { useAuthStore } from './store/auth' import Layout from './components/layout/Layout' import PageLoader from './components/common/PageLoader' import { saveReturnUrl } from './utils/token' // 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' // 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 AdminServers = lazy(() => import('./pages/AdminServers')) const AdminDashboard = lazy(() => import('./pages/AdminDashboard')) const AdminBanSystem = lazy(() => import('./pages/AdminBanSystem')) const AdminBroadcasts = lazy(() => import('./pages/AdminBroadcasts')) const AdminPromocodes = lazy(() => import('./pages/AdminPromocodes')) const AdminCampaigns = lazy(() => import('./pages/AdminCampaigns')) const AdminUsers = lazy(() => import('./pages/AdminUsers')) const AdminPayments = lazy(() => import('./pages/AdminPayments')) const AdminPromoOffers = lazy(() => import('./pages/AdminPromoOffers')) const AdminRemnawave = lazy(() => import('./pages/AdminRemnawave')) 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 App() { return ( {/* Public routes */} } /> } /> } /> } /> } /> } /> } /> {/* Protected routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Admin routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Catch all */} } /> ) } export default App