Lazy load page components

This commit is contained in:
Alex Gleason 2025-06-01 16:26:09 -05:00
parent 3a34db8320
commit 8bdff8da6d
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
4 changed files with 23 additions and 4 deletions

View File

@ -64,6 +64,7 @@ The project uses shadcn/ui components located in `@/components/ui`. These are un
- **Skeleton**: Loading placeholder - **Skeleton**: Loading placeholder
- **Slider**: Input for selecting a value from a range - **Slider**: Input for selecting a value from a range
- **Sonner**: Toast notification manager - **Sonner**: Toast notification manager
- **Spinner**: Animated loading spinner
- **Switch**: Toggle switch control - **Switch**: Toggle switch control
- **Table**: Data table with headers and rows - **Table**: Data table with headers and rows
- **Tabs**: Tabbed interface component - **Tabs**: Tabbed interface component

View File

@ -1,9 +1,11 @@
// NOTE: This file should normally not be modified unless you are adding a new provider. // NOTE: This file should normally not be modified unless you are adding a new provider.
// To add new routes, edit the AppRouter.tsx file. // To add new routes, edit the AppRouter.tsx file.
import { Suspense } from 'react';
import NostrProvider from '@/components/NostrProvider' import NostrProvider from '@/components/NostrProvider'
import { ThemeProvider } from "@/components/ThemeProvider"; import { ThemeProvider } from "@/components/ThemeProvider";
import { Toaster } from "@/components/ui/toaster"; import { Toaster } from "@/components/ui/toaster";
import { Spinner } from '@/components/ui/spinner';
import { Toaster as Sonner } from "@/components/ui/sonner"; import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip"; import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
@ -36,7 +38,9 @@ export function App() {
<TooltipProvider> <TooltipProvider>
<Toaster /> <Toaster />
<Sonner /> <Sonner />
<AppRouter /> <Suspense fallback={<div className="flex items-center justify-center h-screen"><Spinner /></div>}>
<AppRouter />
</Suspense>
</TooltipProvider> </TooltipProvider>
</QueryClientProvider> </QueryClientProvider>
</NostrProvider> </NostrProvider>

View File

@ -1,9 +1,11 @@
import { lazy } from "react";
import { BrowserRouter, Route, Routes } from "react-router-dom"; import { BrowserRouter, Route, Routes } from "react-router-dom";
import Index from "./pages/Index";
import NotFound from "./pages/NotFound";
import { ScrollToTop } from "./components/ScrollToTop"; import { ScrollToTop } from "./components/ScrollToTop";
// Lazy load page components
const Index = lazy(() => import("./pages/Index"));
const NotFound = lazy(() => import("./pages/NotFound"));
export function AppRouter() { export function AppRouter() {
return ( return (
<BrowserRouter> <BrowserRouter>

View File

@ -0,0 +1,12 @@
import { cn } from '@/lib/utils';
import { Loader2 } from 'lucide-react';
const Spinner = ({ className }: { className?: string }) => {
return (
<Loader2
className={cn('my-28 h-16 w-16 text-primary/60 animate-spin', className)}
/>
);
};
export { Spinner };