Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 65 additions & 28 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
import React from 'react'
import React, { lazy, Suspense } from 'react'
import { Routes, Route, Navigate } from 'react-router-dom'
import { AppProvider } from './context/AppContext'
import { ThemeProvider } from './context/ThemeContext'
import Navbar from './components/Navbar'
import Navbar from './components/Navbar'
import RateLimitBanner from './components/RateLimitBanner'
import HomePage from './pages/HomePage'
import OverviewPage from './pages/OverviewPage'
import RepositoriesPage from './pages/RepositoriesPage'
import ContributorsPage from './pages/ContributorsPage'
import ContributorProfilePage from './pages/ContributorProfilePage'
import NetworkPage from './pages/NetworkPage'
import AnalyticsPage from './pages/AnalyticsPage'
import GovernancePage from './pages/GovernancePage'
import SettingsPage from './pages/SettingsPage'
import Footer from './components/layout/Footer'
import Support from './pages/Support'
import { Spinner } from './components/UI'

// Lazy-loaded pages
const HomePage = lazy(() => import('./pages/HomePage'))
const OverviewPage = lazy(() => import('./pages/OverviewPage'))
const RepositoriesPage = lazy(() => import('./pages/RepositoriesPage'))
const ContributorsPage = lazy(() => import('./pages/ContributorsPage'))
const ContributorProfilePage = lazy(() => import('./pages/ContributorProfilePage'))
const NetworkPage = lazy(() => import('./pages/NetworkPage'))
const AnalyticsPage = lazy(() => import('./pages/AnalyticsPage'))
const GovernancePage = lazy(() => import('./pages/GovernancePage'))
const SettingsPage = lazy(() => import('./pages/SettingsPage'))
const Support = lazy(() => import('./pages/Support'))

function Layout({ children }) {
return (
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column' }}>
<div
style={{
minHeight: '100vh',
display: 'flex',
flexDirection: 'column'
}}
>
<Navbar />
<RateLimitBanner />
<main style={{ flex: 1 }}>{children}</main>

<main style={{ flex: 1 }}>
{children}
</main>

<Footer />
</div>
)
Expand All @@ -30,19 +43,43 @@ function Layout({ children }) {
function AppContent() {
return (
<Layout>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/overview" element={<OverviewPage />} />
<Route path="/repositories" element={<RepositoriesPage />} />
<Route path="/contributors" element={<ContributorsPage />} />
<Route path="/contributors/:username" element={<ContributorProfilePage />} />
<Route path="/network" element={<NetworkPage />} />
<Route path="/analytics" element={<AnalyticsPage />} />
<Route path="/governance" element={<GovernancePage />} />
<Route path="/settings" element={<SettingsPage />} />
<Route path="/support-us" element={<Support />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
<Suspense
fallback={
<div
role="status"
aria-label="Loading page"
style={{
minHeight: '60vh',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
>
<Spinner />
</div>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/overview" element={<OverviewPage />} />
<Route path="/repositories" element={<RepositoriesPage />} />
<Route path="/contributors" element={<ContributorsPage />} />
<Route
path="/contributors/:username"
element={<ContributorProfilePage />}
/>
<Route path="/network" element={<NetworkPage />} />
<Route path="/analytics" element={<AnalyticsPage />} />
<Route path="/governance" element={<GovernancePage />} />
<Route path="/settings" element={<SettingsPage />} />
<Route path="/support-us" element={<Support />} />

<Route
path="*"
element={<Navigate to="/" replace />}
/>
</Routes>
</Suspense>
</Layout>
)
}
Expand All @@ -55,4 +92,4 @@ export default function App() {
</AppProvider>
</ThemeProvider>
)
}
}
Loading