76 lines
4.0 KiB
React
76 lines
4.0 KiB
React
import AddMember from './components/AddMember'
|
|
import { Routes, Route, Navigate } from 'react-router-dom'
|
|
import { useAuth } from './context/AuthContext'
|
|
import Login from './components/Login'
|
|
import Dashboard from './components/Dashboard'
|
|
import MembersList from './components/MembersList'
|
|
import MemberDetail from './components/MemberDetail'
|
|
import EditProfile from './components/EditProfile'
|
|
import GuestsList from './components/GuestsList'
|
|
import GuestDetail from './components/GuestDetail'
|
|
import AddGuestForm from './components/AddGuestForm'
|
|
import EditGuestForm from './components/EditGuestForm'
|
|
import RecommendationsList from './components/RecommendationsList'
|
|
import AddRecommendationForm from './components/AddRecommendationForm'
|
|
import EditRecommendationForm from './components/EditRecommendationForm'
|
|
import HonorsList from './components/HonorsList'
|
|
import Gallery from './components/Gallery'
|
|
import AdminHonors from './components/AdminHonors'
|
|
import AdminEvents from './components/AdminEvents'
|
|
import AdminUsers from './components/AdminUsers'
|
|
import AdminLogs from './components/AdminLogs'
|
|
import AdminPresentationEditor from './components/AdminPresentationEditor'
|
|
import Profile from './components/Profile'
|
|
import ChangePassword from './components/ChangePassword'
|
|
import Notifications from './components/Notifications'
|
|
import Presentation from './components/Presentation'
|
|
import Layout from './components/Layout'
|
|
|
|
function PrivateRoute({ children }) {
|
|
const { user, loading } = useAuth()
|
|
if (loading) return <div className="flex items-center justify-center min-h-screen"><p className="text-gray-500">Chargement...</p></div>
|
|
return user ? children : <Navigate to="/login" replace />
|
|
}
|
|
|
|
function AdminRoute({ children }) {
|
|
const { user, loading } = useAuth()
|
|
if (loading) return <div className="flex items-center justify-center min-h-screen"><p className="text-gray-500">Chargement...</p></div>
|
|
if (!user) return <Navigate to="/login" replace />
|
|
if (user.role !== 'admin') return <Navigate to="/" replace />
|
|
return children
|
|
}
|
|
|
|
export default function App() {
|
|
return (
|
|
<Routes>
|
|
<Route path="/login" element={<Login />} />
|
|
<Route path="/" element={<PrivateRoute><Layout /></PrivateRoute>}>
|
|
<Route index element={<Dashboard />} />
|
|
<Route path="members" element={<MembersList />} />
|
|
<Route path="members/:id" element={<MemberDetail />} />
|
|
<Route path="members/edit/:id" element={<EditProfile />} />
|
|
<Route path="guests" element={<GuestsList />} />
|
|
<Route path="guests/add" element={<AddGuestForm />} />
|
|
<Route path="guests/edit/:id" element={<EditGuestForm />} />
|
|
<Route path="guests/:id" element={<GuestDetail />} />
|
|
<Route path="recommendations" element={<RecommendationsList />} />
|
|
<Route path="recommendations/add" element={<AddRecommendationForm />} />
|
|
<Route path="recommendations/edit/:id" element={<EditRecommendationForm />} />
|
|
<Route path="honors" element={<HonorsList />} />
|
|
<Route path="admin/honors" element={<AdminRoute><AdminHonors /></AdminRoute>} />
|
|
<Route path="admin/events" element={<AdminRoute><AdminEvents /></AdminRoute>} />
|
|
<Route path="admin/users" element={<AdminRoute><AdminUsers /></AdminRoute>} />
|
|
<Route path="admin/logs" element={<AdminRoute><AdminLogs /></AdminRoute>} />
|
|
<Route path="admin/presentation-editor" element={<AdminRoute><AdminPresentationEditor /></AdminRoute>} />
|
|
<Route path="gallery" element={<Gallery />} />
|
|
<Route path="profile" element={<Profile />} />
|
|
<Route path="profile/password" element={<ChangePassword />} />
|
|
<Route path="notifications" element={<Notifications />} />
|
|
<Route path="members/add" element={<AdminRoute><AddMember /></AdminRoute>} />
|
|
</Route>
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
<Route path="/presentation/:date" element={<PrivateRoute><Presentation /></PrivateRoute>} />
|
|
</Routes>
|
|
)
|
|
}
|