import AddOrganizationWizard from '@/components/add-organization/AddOrganizationWizard.tsx'; import { AdminLayout } from '@/components/admin/layout/AdminLayout.tsx'; import ProtectedRoute from '@/components/auth/ProtectedRoute.tsx'; import Chatbot from '@/components/chatbot/Chatbot.tsx'; import Spinner from '@/components/ui/Spinner.tsx'; import { useUI } from '@/hooks/useUI.ts'; import { NavigationProvider } from '@/providers/NavigationProvider.tsx'; import { AnimatePresence, motion } from 'framer-motion'; import React, { Suspense } from 'react'; import { Route, BrowserRouter as Router, Routes, useLocation } from 'react-router-dom'; // Performance: Lazily load page components to improve initial load time. const LandingPage = React.lazy(() => import('../pages/LandingPage.tsx')); const MapView = React.lazy(() => import('../pages/MapView.tsx')); const OrganizationPage = React.lazy(() => import('@/pages/OrganizationPage.tsx')); const OrganizationDashboardPage = React.lazy(() => import('@/pages/OrganizationDashboardPage.tsx')); const AboutPage = React.lazy(() => import('../pages/AboutPage.tsx')); const ContactPage = React.lazy(() => import('../pages/ContactPage.tsx')); const PrivacyPage = React.lazy(() => import('../pages/PrivacyPage.tsx')); const AdminDashboard = React.lazy(() => import('../pages/admin/AdminDashboard.tsx')); const AdminOrganizationsPage = React.lazy( () => import('../pages/admin/AdminOrganizationsPage.tsx') ); const AdminOrganizationEditPage = React.lazy( () => import('../pages/admin/AdminOrganizationEditPage.tsx') ); const AdminVerificationQueuePage = React.lazy( () => import('../pages/admin/AdminVerificationQueuePage.tsx') ); const AdminOrganizationsAnalyticsPage = React.lazy( () => import('../pages/admin/AdminOrganizationsAnalyticsPage.tsx') ); const AdminSettingsMaintenancePage = React.lazy( () => import('../pages/admin/AdminSettingsMaintenancePage.tsx') ); // Existing admin pages (migrating to new structure) const UsersListPage = React.lazy(() => import('../pages/admin/UsersListPage.tsx')); const UserEditPage = React.lazy(() => import('../pages/admin/UserEditPage.tsx')); const ContentPagesPage = React.lazy(() => import('../pages/admin/ContentPagesPage.tsx')); const ContentPageEditPage = React.lazy(() => import('../pages/admin/ContentPageEditPage.tsx')); const AnnouncementsPage = React.lazy(() => import('../pages/admin/AnnouncementsPage.tsx')); const MediaLibraryPage = React.lazy(() => import('../pages/admin/MediaLibraryPage.tsx')); const LocalizationUIPage = React.lazy(() => import('../pages/admin/LocalizationUIPage.tsx')); const LocalizationDataPage = React.lazy(() => import('../pages/admin/LocalizationDataPage.tsx')); const DashboardPage = React.lazy(() => import('../pages/DashboardPage.tsx')); const AnalyticsDashboard = React.lazy(() => import('../pages/AnalyticsDashboard.tsx')); const ImpactMetrics = React.lazy(() => import('../pages/ImpactMetrics.tsx')); const SupplyDemandAnalysis = React.lazy(() => import('../pages/SupplyDemandAnalysis.tsx')); const OrganizationsListPage = React.lazy(() => import('../pages/OrganizationsListPage.tsx')); const OrganizationEditPage = React.lazy(() => import('../pages/OrganizationEditPage.tsx')); const HeritagePage = React.lazy(() => import('../pages/HeritagePage.tsx')); const HeritageBuildingPage = React.lazy(() => import('../pages/HeritageBuildingPage.tsx')); const LoginPage = React.lazy(() => import('../pages/LoginPage.tsx')); const SignupPage = React.lazy(() => import('../pages/SignupPage.tsx')); const ResourceFlowsPage = React.lazy(() => import('../pages/ResourceFlowsPage.tsx')); const ResourceFlowDetailPage = React.lazy(() => import('../pages/ResourceFlowDetailPage.tsx')); const MatchingDashboard = React.lazy(() => import('../pages/MatchingDashboard.tsx')); const MatchDetailPage = React.lazy(() => import('../pages/MatchDetailPage.tsx')); const MatchNegotiationPage = React.lazy(() => import('../pages/MatchNegotiationPage.tsx')); const MatchesMapView = React.lazy(() => import('../pages/MatchesMapView.tsx')); const DiscoveryPage = React.lazy(() => import('../pages/DiscoveryPage.tsx')); const CommunityNewsPage = React.lazy(() => import('../pages/CommunityNewsPage.tsx')); const CommunityImpactPage = React.lazy(() => import('../pages/CommunityImpactPage.tsx')); const CommunityStoriesPage = React.lazy(() => import('../pages/CommunityStoriesPage.tsx')); const CommunityEventsPage = React.lazy(() => import('../pages/CommunityEventsPage.tsx')); /** * Wrapper component for admin pages that provides AdminLayout */ const AdminPageWrapper = ({ children, title, breadcrumbs, }: { children: React.ReactNode; title?: string; breadcrumbs?: Array<{ label: string; href?: string }>; }) => ( {children} ); const AppRoutes = () => { const location = useLocation(); const { isAddOrgWizardOpen, closeAddOrgWizard } = useUI(); const pagesWithoutChatbot = [ '/organization', '/about', '/contact', '/privacy', '/admin', '/dashboard', '/heritage', '/resources', '/matching', '/login', '/signup', ]; return (
} > } /> } /> } /> } /> } /> } /> } /> } /> {/* Admin Routes */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {!pagesWithoutChatbot.some((page) => location.pathname.startsWith(page)) && (
)} ); }; const AppRouter = () => ( ); export default AppRouter;