11
2- import React , { useMemo } from 'react' ;
2+ import React , { useMemo , lazy , Suspense } from 'react' ;
33import {
44 ApolloClient ,
55 InMemoryCache ,
@@ -9,15 +9,18 @@ import {
99import { setContext } from '@apollo/client/link/context' ;
1010import { ApolloProvider } from '@apollo/client/react' ;
1111import { BrowserRouter , Routes , Route } from 'react-router-dom' ;
12- import Login from './pages/Login' ;
13- import Register from './pages/Register' ;
14- import Dashboard from './pages/Dashboard' ;
15- import Project from './pages/Project' ;
16- import Archive from './pages/Archive' ;
1712import { AuthProvider , useAuth } from './context/AuthContext' ;
1813import { ThemeProvider } from './context/ThemeContext' ;
1914import ProtectedRoute from './components/ProtectedRoute' ;
2015import ErrorBoundary from './components/ErrorBoundary' ;
16+ import LoadingSpinner from './components/LoadingSpinner' ;
17+
18+ // Lazy load pages for code splitting
19+ const Login = lazy ( ( ) => import ( './pages/Login' ) ) ;
20+ const Register = lazy ( ( ) => import ( './pages/Register' ) ) ;
21+ const Dashboard = lazy ( ( ) => import ( './pages/Dashboard' ) ) ;
22+ const Project = lazy ( ( ) => import ( './pages/Project' ) ) ;
23+ const Archive = lazy ( ( ) => import ( './pages/Archive' ) ) ;
2124
2225const AppContent : React . FC = ( ) => {
2326 const { token } = useAuth ( ) ;
@@ -64,17 +67,19 @@ const AppContent: React.FC = () => {
6467 return (
6568 < ApolloProvider client = { client } >
6669 < BrowserRouter >
67- < Routes >
68- < Route path = "/" element = { < Login /> } />
69- < Route path = "/login" element = { < Login /> } />
70- < Route path = "/register" element = { < Register /> } />
71- < Route element = { < ProtectedRoute /> } >
72- < Route path = "/dashboard" element = { < Dashboard /> } />
73- < Route path = "/project/:id" element = { < Project /> } />
74- < Route path = "/archive" element = { < Archive /> } />
75- </ Route >
76- < Route path = "*" element = { < Login /> } />
77- </ Routes >
70+ < Suspense fallback = { < LoadingSpinner /> } >
71+ < Routes >
72+ < Route path = "/" element = { < Login /> } />
73+ < Route path = "/login" element = { < Login /> } />
74+ < Route path = "/register" element = { < Register /> } />
75+ < Route element = { < ProtectedRoute /> } >
76+ < Route path = "/dashboard" element = { < Dashboard /> } />
77+ < Route path = "/project/:id" element = { < Project /> } />
78+ < Route path = "/archive" element = { < Archive /> } />
79+ </ Route >
80+ < Route path = "*" element = { < Login /> } />
81+ </ Routes >
82+ </ Suspense >
7883 </ BrowserRouter >
7984 </ ApolloProvider >
8085 ) ;
0 commit comments