import { Toaster } from "@/components/ui/toaster"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route, Navigate, useLocation, ScrollRestoration, } from "react-router-dom"; import { useEffect, lazy, Suspense, useCallback } from "react"; import ProtectedRoute from "./components/ProtectedRoute"; import { AuthProvider } from "./hooks/useAuth"; import { AdSettingsProvider } from "./hooks/useAdSettings"; import DemoDataProvider from "@/components/DemoDataProvider"; import SitemapRoute from "./components/SitemapRoute"; import { initGA, trackPageView } from "./lib/analytics"; import ErrorBoundary from "./components/ErrorBoundary"; import { HelmetProvider } from 'react-helmet-async'; import { ensureAdSenseScript } from "@/components/AdSenseSlot"; /* ─── Eager load Index (LCP critical) ─── */ import Index from "./pages/Index"; /* ─── Lazy load all other routes ─── */ const BlogPage = lazy(() => import("./pages/BlogPage")); const SingleBlogPost = lazy(() => import("./pages/SingleBlogPost")); const Contact = lazy(() => import("./pages/Contact")); const AdminLogin = lazy(() => import("./pages/AdminLogin")); const AdminDashboard = lazy(() => import("./pages/AdminDashboard")); const NotFound = lazy(() => import("./pages/NotFound")); const Error500 = lazy(() => import("./pages/Error500")); const PrivacyPolicy = lazy(() => import("./pages/PrivacyPolicy")); const TermsConditions = lazy(() => import("./pages/TermsConditions")); const AdTestPage = lazy(() => import("./pages/AdTestPage")); const AdsManagerTest = lazy(() => import("./test/AdsManagerTest")); const About = lazy(() => import("./pages/About")); const FAQ = lazy(() => import("./pages/FAQ")); const BusinessWebapps = lazy(() => import("./pages/BusinessWebapps")); const BrandDesign = lazy(() => import("./pages/services/BrandDesign")); const WebDevelopment = lazy(() => import("./pages/services/WebDevelopment")); const SEOService = lazy(() => import("./pages/services/SEOService")); const MobileAppDevelopment = lazy(() => import("./pages/services/MobileAppDevelopment")); const AnalyticsService = lazy(() => import("./pages/services/AnalyticsService")); const DigitalStrategy = lazy(() => import("./pages/services/DigitalStrategy")); const AIAutomationService = lazy(() => import("./pages/services/AIAutomationService")); const WhatsAppMarketingService = lazy(() => import("./pages/services/WhatsAppMarketingService")); const Services = lazy(() => import("./pages/Services")); const ServiceLocationsIndex = lazy(() => import("./pages/ServiceLocationsIndex")); const SecureDownload = lazy(() => import("./pages/SecureDownload")); const ServiceLocationRouter = lazy(() => import("./pages/ServiceLocationRouter")); const HierarchicalRouter = lazy(() => import("./pages/HierarchicalRouter")); const ServiceLocationPage = lazy(() => import("./pages/services/ServiceLocationPage")); const BudgetCalculator = lazy(() => import("./components/BudgetCalculator")); const ServiceDetailPage = lazy(() => import("./pages/services/ServiceDetailPage")); const Shop = lazy(() => import("./pages/Shop")); const ShopProduct = lazy(() => import("./pages/ShopProduct")); const DocumentPage = lazy(() => import("./pages/DocumentPage")); const CoursesPage = lazy(() => import("./pages/CoursesPage")); const CourseDetailPage = lazy(() => import("./pages/CourseDetailPage")); const CourseLogin = lazy(() => import("./pages/CourseLogin")); const MyCoursesPage = lazy(() => import("./pages/MyCoursesPage")); const LearnCoursePage = lazy(() => import("./pages/LearnCoursePage")); /* ─── Lazy Ad Provider ─── */ const LazyAdConfigProvider = lazy(() => import("@/contexts/AdConfigContext").then(m => ({ default: m.AdConfigProvider })) ); /* ─── Query Client ─── */ const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 10 * 60 * 1000, // 10 min gcTime: 30 * 60 * 1000, // 30 min retry: 1, refetchOnWindowFocus: false, networkMode: 'offlineFirst', }, }, }); /* ─── Premium Page Loader ─── */ const PageLoader = () => (
Loading...