Initial Commit
This commit is contained in:
104
src/App.tsx
Normal file
104
src/App.tsx
Normal file
@@ -0,0 +1,104 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user