From 872c28b9372924e4e48c407ab834badcebad525c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 20:00:24 +0000 Subject: [PATCH] [jules] perf: Implement lazy loading and code splitting for routes Co-authored-by: Devasy23 <110348311+Devasy23@users.noreply.github.com> --- web/App.tsx | 57 +++++++++++++++++--------------- web/components/ui/PageLoader.tsx | 10 ++++++ 2 files changed, 41 insertions(+), 26 deletions(-) create mode 100644 web/components/ui/PageLoader.tsx diff --git a/web/App.tsx b/web/App.tsx index 894e6b7..a771291 100644 --- a/web/App.tsx +++ b/web/App.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { Suspense } from 'react'; import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; import { Layout } from './components/layout/Layout'; import { ThemeWrapper } from './components/layout/ThemeWrapper'; @@ -8,21 +8,24 @@ import { ToastProvider } from './contexts/ToastContext'; import { ConfirmProvider } from './contexts/ConfirmContext'; import { ToastContainer } from './components/ui/Toast'; import { ErrorBoundary } from './components/ErrorBoundary'; -import { Auth } from './pages/Auth'; -import { Dashboard } from './pages/Dashboard'; -import { Friends } from './pages/Friends'; -import { GroupDetails } from './pages/GroupDetails'; -import { Groups } from './pages/Groups'; -import { Profile } from './pages/Profile'; -import { SplitwiseCallback } from './pages/SplitwiseCallback'; -import { SplitwiseGroupSelection } from './pages/SplitwiseGroupSelection'; -import { SplitwiseImport } from './pages/SplitwiseImport'; +import { PageLoader } from './components/ui/PageLoader'; + +// Lazy load pages +const Auth = React.lazy(() => import('./pages/Auth').then(module => ({ default: module.Auth }))); +const Dashboard = React.lazy(() => import('./pages/Dashboard').then(module => ({ default: module.Dashboard }))); +const Friends = React.lazy(() => import('./pages/Friends').then(module => ({ default: module.Friends }))); +const GroupDetails = React.lazy(() => import('./pages/GroupDetails').then(module => ({ default: module.GroupDetails }))); +const Groups = React.lazy(() => import('./pages/Groups').then(module => ({ default: module.Groups }))); +const Profile = React.lazy(() => import('./pages/Profile').then(module => ({ default: module.Profile }))); +const SplitwiseCallback = React.lazy(() => import('./pages/SplitwiseCallback').then(module => ({ default: module.SplitwiseCallback }))); +const SplitwiseGroupSelection = React.lazy(() => import('./pages/SplitwiseGroupSelection').then(module => ({ default: module.SplitwiseGroupSelection }))); +const SplitwiseImport = React.lazy(() => import('./pages/SplitwiseImport').then(module => ({ default: module.SplitwiseImport }))); // Protected Route Wrapper const ProtectedRoute = ({ children }: { children: React.ReactElement }) => { const { isAuthenticated, isLoading } = useAuth(); - if (isLoading) return