105 lines
2.5 KiB
TypeScript
105 lines
2.5 KiB
TypeScript
import { ClerkProvider } from '@clerk/clerk-react';
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { BrowserRouter, Routes, Route } from 'react-router-dom';
|
|
|
|
// Import Leaflet CSS
|
|
import 'leaflet/dist/leaflet.css';
|
|
|
|
// Layout
|
|
import { Layout } from './components/layout';
|
|
|
|
// Auth components
|
|
import { ProtectedRoute, SignInPage, SignUpPage } from './components/auth';
|
|
|
|
// Pages
|
|
import {
|
|
HomePage,
|
|
MapPage,
|
|
ReportFormPage,
|
|
EventsPage,
|
|
AnalyticsPage
|
|
} from './pages';
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
staleTime: 1000 * 60 * 5, // 5 minutes
|
|
retry: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;
|
|
|
|
if (!clerkPubKey) {
|
|
throw new Error('Missing Clerk Publishable Key');
|
|
}
|
|
|
|
function App() {
|
|
return (
|
|
<ClerkProvider publishableKey={clerkPubKey}>
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
{/* Public routes */}
|
|
<Route path="/sign-in/*" element={<SignInPage />} />
|
|
<Route path="/sign-up/*" element={<SignUpPage />} />
|
|
|
|
{/* Routes with layout */}
|
|
<Route
|
|
path="/"
|
|
element={
|
|
<Layout>
|
|
<HomePage />
|
|
</Layout>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/map"
|
|
element={
|
|
<Layout>
|
|
<MapPage />
|
|
</Layout>
|
|
}
|
|
/>
|
|
|
|
{/* Protected routes */}
|
|
<Route
|
|
path="/reports/new"
|
|
element={
|
|
<ProtectedRoute>
|
|
<Layout>
|
|
<ReportFormPage />
|
|
</Layout>
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/events"
|
|
element={
|
|
<ProtectedRoute>
|
|
<Layout>
|
|
<EventsPage />
|
|
</Layout>
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/analytics"
|
|
element={
|
|
<ProtectedRoute>
|
|
<Layout>
|
|
<AnalyticsPage />
|
|
</Layout>
|
|
</ProtectedRoute>
|
|
}
|
|
/>
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
</ClerkProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|