-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.tsx
More file actions
86 lines (68 loc) · 2.41 KB
/
index.tsx
File metadata and controls
86 lines (68 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { AuthProvider, useAuth } from './lib/auth';
import App from './App';
import Page from './app/page';
import AdminPage from './app/admin';
import LoginPage from './app/login';
import ProjectsPage from './app/projects';
import ProjectDetailPage from './app/project-detail';
import BlogPage from './app/blog';
import BlogDetailPage from './app/blog-detail';
import AboutPage from './app/about';
import CertificatesPage from './app/certificates';
import PrivacyPage from './app/privacy';
import TermsPage from './app/terms';
import './global.css';
const queryClient = new QueryClient();
const rootElement = document.getElementById('root');
if (!rootElement) {
throw new Error("Could not find root element to mount to");
}
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const { user, isLoading } = useAuth();
if (isLoading) {
return <div className="min-h-screen flex items-center justify-center">Loading...</div>;
}
return user ? <>{children}</> : <Navigate to="/login" replace />;
}
function AppRoutes() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<App />}>
<Route index element={<Page />} />
<Route path="about" element={<AboutPage />} />
<Route path="certificates" element={<CertificatesPage />} />
<Route path="projects" element={<ProjectsPage />} />
<Route path="projects/:slug" element={<ProjectDetailPage />} />
<Route path="blog" element={<BlogPage />} />
<Route path="blog/:slug" element={<BlogDetailPage />} />
<Route path="privacy" element={<PrivacyPage />} />
<Route path="terms" element={<TermsPage />} />
<Route path="login" element={<LoginPage />} />
<Route
path="admin"
element={
<ProtectedRoute>
<AdminPage />
</ProtectedRoute>
}
/>
</Route>
</Routes>
</BrowserRouter>
);
}
const root = ReactDOM.createRoot(rootElement);
root.render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
<AuthProvider>
<AppRoutes />
</AuthProvider>
</QueryClientProvider>
</React.StrictMode>
);