1import { Toaster } from "@/components/ui/toaster"; 2import { Toaster as Sonner } from "@/components/ui/sonner"; 3import { TooltipProvider } from "@/components/ui/tooltip"; 4import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; 5import { BrowserRouter, Routes, Route } from "react-router-dom"; 6import { AuthProvider } from "@/hooks/useAuth"; 7import { lazy, Suspense } from "react"; 8import { LoadingSpinner } from "@/components/ui/loading-spinner"; 9// Lazy load all pages including Index for better performance 10const Index = lazy(() => import("./pages/Index")); 11const Auth = lazy(() => import("./pages/Auth")); 12const Dashboard = lazy(() => import("./pages/Dashboard")); 13const CreateListing = lazy(() => import("./pages/CreateListing")); 14const EditListing = lazy(() => import("./pages/EditListing")); 15const ListingDetail = lazy(() => import("./pages/ListingDetail")); 16const SearchListings = lazy(() => import("./pages/SearchListings")); 17const CustomerListingDetail = lazy(() => import("./pages/CustomerListingDetail")); 18const Impressum = lazy(() => import("./pages/Impressum")); 19const AGB = lazy(() => import("./pages/AGB")); 20const Datenschutz = lazy(() => import("./pages/Datenschutz")); 21const SafetyTips = lazy(() => import("./pages/SafetyTips")); 22const Favorites = lazy(() => import("./pages/Favorites")); 23const AdminDashboard = lazy(() => import("./pages/AdminDashboard")); 24const FAQ = lazy(() => import("./pages/FAQ")); 25const NotFound = lazy(() => import("./pages/NotFound")); 26const Messages = lazy(() => import("./pages/Messages")); 27const Analytics = lazy(() => import("./pages/Analytics")); 28const Social = lazy(() => import("./pages/Social")); 29const SecurityPrivacy = lazy(() => import("./pages/SecurityPrivacy")); 30const QuickAdd = lazy(() => import("./pages/QuickAdd")); 31const Orders = lazy(() => import("./pages/Orders")); 32const OrderDetail = lazy(() => import("./pages/OrderDetail")); 33 34const queryClient = new QueryClient({ 35 defaultOptions: { 36 queries: { 37 staleTime: 5 * 60 * 1000, // 5 minutes 38 gcTime: 10 * 60 * 1000, // 10 minutes 39 }, 40 }, 41}); 42 43const App = () => ( 44 <QueryClientProvider client={queryClient}> 45 <AuthProvider> 46 <TooltipProvider> 47 <Toaster /> 48 <Sonner /> 49 <BrowserRouter> 50 <Routes> 51 <Route path="/" element={<Suspense fallback={<LoadingSpinner />}><Index /></Suspense>} /> 52 <Route path="/auth" element={<Suspense fallback={<LoadingSpinner />}><Auth /></Suspense>} /> 53 <Route path="/dashboard" element={<Suspense fallback={<LoadingSpinner />}><Dashboard /></Suspense>} /> 54 <Route path="/create-listing" element={<Suspense fallback={<LoadingSpinner />}><CreateListing /></Suspense>} /> 55 <Route path="/edit-listing/:id" element={<Suspense fallback={<LoadingSpinner />}><EditListing /></Suspense>} /> 56 <Route path="/listing/:id" element={<Suspense fallback={<LoadingSpinner />}><ListingDetail /></Suspense>} /> 57 <Route path="/search" element={<Suspense fallback={<LoadingSpinner />}><SearchListings /></Suspense>} /> 58 <Route path="/buy/:id" element={<Suspense fallback={<LoadingSpinner />}><CustomerListingDetail /></Suspense>} /> 59 <Route path="/impressum" element={<Suspense fallback={<LoadingSpinner />}><Impressum /></Suspense>} /> 60 <Route path="/agb" element={<Suspense fallback={<LoadingSpinner />}><AGB /></Suspense>} /> 61 <Route path="/datenschutz" element={<Suspense fallback={<LoadingSpinner />}><Datenschutz /></Suspense>} /> 62 <Route path="/sicherheitstipps" element={<Suspense fallback={<LoadingSpinner />}><SafetyTips /></Suspense>} /> 63 <Route path="/faq" element={<Suspense fallback={<LoadingSpinner />}><FAQ /></Suspense>} /> 64 <Route path="/favorites" element={<Suspense fallback={<LoadingSpinner />}><Favorites /></Suspense>} /> 65 <Route path="/admin" element={<Suspense fallback={<LoadingSpinner />}><AdminDashboard /></Suspense>} /> 66 <Route path="/messages" element={<Suspense fallback={<LoadingSpinner />}><Messages /></Suspense>} /> 67 <Route path="/analytics" element={<Suspense fallback={<LoadingSpinner />}><Analytics /></Suspense>} /> 68 <Route path="/social" element={<Suspense fallback={<LoadingSpinner />}><Social /></Suspense>} /> 69 <Route path="/sicherheit-privatsphaere" element={<Suspense fallback={<LoadingSpinner />}><SecurityPrivacy /></Suspense>} /> 70 <Route path="/quick-add" element={<Suspense fallback={<LoadingSpinner />}><QuickAdd /></Suspense>} /> 71 <Route path="/orders" element={<Suspense fallback={<LoadingSpinner />}><Orders /></Suspense>} /> 72 <Route path="/orders/:id" element={<Suspense fallback={<LoadingSpinner />}><OrderDetail /></Suspense>} /> 73 {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} 74 <Route path="*" element={<Suspense fallback={<LoadingSpinner />}><NotFound /></Suspense>} /> 75 </Routes> 76 </BrowserRouter> 77 </TooltipProvider> 78 </AuthProvider> 79 </QueryClientProvider> 80); 81 82export default App;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.