|
1 | | - |
2 | | -import { Toaster } from "@/components/ui/toaster"; |
3 | | -import { Toaster as Sonner } from "@/components/ui/sonner"; |
4 | | -import { TooltipProvider } from "@/components/ui/tooltip"; |
5 | | -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; |
6 | | -import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; |
7 | | -import { useEffect, lazy, Suspense } from "react"; |
8 | | -import { ErrorBoundary } from "@/components/ErrorBoundary"; |
9 | | -import { HelmetProvider } from 'react-helmet-async'; |
| 1 | +import { Suspense, lazy } from 'react'; |
| 2 | +import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; |
10 | 3 | import { AuthProvider } from '@/contexts/AuthContext'; |
11 | | -import './i18n'; |
| 4 | +import { Toaster } from '@/components/ui/toaster'; |
| 5 | +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; |
| 6 | +import { Helmet, HelmetProvider } from 'react-helmet-async'; |
| 7 | +import { CookieBanner } from '@/components/CookieBanner'; |
| 8 | +import { ErrorBoundary } from '@/components/ErrorBoundary'; |
| 9 | +import '@/i18n'; |
| 10 | +import PrivacyPage from '@/pages/PrivacyPage'; |
| 11 | +import LegalPage from '@/pages/LegalPage'; |
12 | 12 |
|
13 | | -// Lazy loading des composants de page |
14 | | -const Index = lazy(() => import("./pages/Index")); |
15 | | -const NotFound = lazy(() => import("./pages/NotFound")); |
16 | | -const AffiliatePage = lazy(() => import("./pages/AffiliatePage")); |
17 | | -const TrackingPage = lazy(() => import("./pages/TrackingPage")); |
18 | | -const ShortLinkPage = lazy(() => import("./pages/ShortLinkPage")); |
19 | | -const LandingPage = lazy(() => import("./pages/LandingPage")); |
20 | | -const PricingPage = lazy(() => import("./pages/PricingPage")); |
21 | | -const TrackingJsRoute = lazy(() => import("./pages/TrackingJsRoute")); |
22 | | -const TestProductsPage = lazy(() => import("./pages/TestProductsPage")); |
23 | | -const TestThankYouPage = lazy(() => import("./pages/TestThankYouPage")); |
24 | | -const AdvancedStatsPage = lazy(() => import("./pages/AdvancedStatsPage")); |
25 | | -const PaymentSuccessPage = lazy(() => import("./pages/PaymentSuccessPage")); |
| 13 | +const Index = lazy(() => import('@/pages/Index')); |
| 14 | +const Dashboard = lazy(() => import('@/components/Dashboard')); |
| 15 | +const AdvancedStatsPage = lazy(() => import('@/pages/AdvancedStatsPage')); |
| 16 | +const AffiliatePage = lazy(() => import('@/pages/AffiliatePage')); |
| 17 | +const ShortLinkTrackingPage = lazy(() => import('@/pages/ShortLinkTrackingPage')); |
26 | 18 |
|
27 | | -// QueryClient simplifié |
28 | 19 | const queryClient = new QueryClient({ |
29 | 20 | defaultOptions: { |
30 | 21 | queries: { |
31 | | - staleTime: 30 * 1000, // 30 secondes seulement |
32 | | - retry: 1, // Moins de retry |
| 22 | + retry: 1, |
33 | 23 | refetchOnWindowFocus: false, |
34 | 24 | }, |
35 | 25 | }, |
36 | 26 | }); |
37 | 27 |
|
38 | | -// Composant de loading ultra-simple |
39 | | -const FastLoader = () => ( |
40 | | - <div className="min-h-screen bg-white flex items-center justify-center"> |
41 | | - <div className="w-8 h-8 border-2 border-blue-600 border-t-transparent rounded-full animate-spin"></div> |
42 | | - </div> |
43 | | -); |
44 | | - |
45 | | -const DomainRouter = () => { |
46 | | - const hostname = window.location.hostname; |
47 | | - const currentPath = window.location.pathname; |
48 | | - |
49 | | - useEffect(() => { |
50 | | - if (hostname === 'dashboard.refspring.com' && currentPath === '/') { |
51 | | - window.location.replace('/dashboard'); |
52 | | - } |
53 | | - }, [hostname, currentPath]); |
54 | | - |
| 28 | +function App() { |
55 | 29 | return ( |
56 | 30 | <ErrorBoundary> |
57 | | - <Suspense fallback={<FastLoader />}> |
58 | | - <Routes> |
59 | | - <Route path="/" element={ |
60 | | - hostname === 'dashboard.refspring.com' |
61 | | - ? <Navigate to="/dashboard" replace /> |
62 | | - : <LandingPage /> |
63 | | - } /> |
64 | | - |
65 | | - <Route path="/pricing" element={<PricingPage />} /> |
66 | | - <Route path="/dashboard" element={<Index />} /> |
67 | | - <Route path="/advanced-stats" element={<AdvancedStatsPage />} /> |
68 | | - <Route path="/advanced-stats/:campaignId" element={<AdvancedStatsPage />} /> |
69 | | - |
70 | | - <Route path="/payment-success" element={<PaymentSuccessPage />} /> |
71 | | - |
72 | | - <Route path="/tracking.js" element={<TrackingJsRoute />} /> |
73 | | - |
74 | | - <Route path="/test-products" element={<TestProductsPage />} /> |
75 | | - <Route path="/test-thankyou" element={<TestThankYouPage />} /> |
76 | | - |
77 | | - <Route path="/r/:campaignId" element={<AffiliatePage />} /> |
78 | | - <Route path="/track/:campaignId/:affiliateId" element={<TrackingPage />} /> |
79 | | - <Route path="/s/:shortCode" element={<ShortLinkPage />} /> |
80 | | - |
81 | | - <Route path="*" element={<NotFound />} /> |
82 | | - </Routes> |
83 | | - </Suspense> |
84 | | - </ErrorBoundary> |
85 | | - ); |
86 | | -}; |
87 | | - |
88 | | -const App = () => ( |
89 | | - <ErrorBoundary> |
90 | | - <HelmetProvider> |
91 | | - <AuthProvider> |
| 31 | + <HelmetProvider> |
92 | 32 | <QueryClientProvider client={queryClient}> |
93 | | - <TooltipProvider> |
94 | | - <Toaster /> |
95 | | - <Sonner /> |
96 | | - <BrowserRouter> |
97 | | - <DomainRouter /> |
98 | | - </BrowserRouter> |
99 | | - </TooltipProvider> |
| 33 | + <AuthProvider> |
| 34 | + <Router> |
| 35 | + <Helmet> |
| 36 | + <title>RefSpring - Plateforme d'affiliation</title> |
| 37 | + <meta name="description" content="Gérez vos programmes d'affiliation avec RefSpring" /> |
| 38 | + </Helmet> |
| 39 | + |
| 40 | + <div className="App"> |
| 41 | + <Suspense fallback={<div className="min-h-screen bg-white flex items-center justify-center"> |
| 42 | + <div className="animate-spin rounded-full h-8 w-8 border-2 border-blue-600 border-t-transparent"></div> |
| 43 | + </div>}> |
| 44 | + <Routes> |
| 45 | + <Route path="/" element={<Index />} /> |
| 46 | + <Route path="/dashboard" element={<Dashboard />} /> |
| 47 | + <Route path="/campaign/:campaignId" element={<AdvancedStatsPage />} /> |
| 48 | + <Route path="/affiliate/:affiliateId" element={<AffiliatePage />} /> |
| 49 | + <Route path="/s/:shortCode" element={<ShortLinkTrackingPage />} /> |
| 50 | + <Route path="/privacy" element={<PrivacyPage />} /> |
| 51 | + <Route path="/legal" element={<LegalPage />} /> |
| 52 | + </Routes> |
| 53 | + </Suspense> |
| 54 | + |
| 55 | + <CookieBanner /> |
| 56 | + <Toaster /> |
| 57 | + </div> |
| 58 | + </Router> |
| 59 | + </AuthProvider> |
100 | 60 | </QueryClientProvider> |
101 | | - </AuthProvider> |
102 | | - </HelmetProvider> |
103 | | - </ErrorBoundary> |
104 | | -); |
| 61 | + </HelmetProvider> |
| 62 | + </ErrorBoundary> |
| 63 | + ); |
| 64 | +} |
105 | 65 |
|
106 | 66 | export default App; |
0 commit comments