Files
catalogue_frontend/src/App.jsx
2026-08-11 19:14:03 +05:30

109 lines
3.1 KiB
JavaScript

import React from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { AuthProvider, useAuth } from './context/AuthContext';
import { ErrorBoundary } from './components/ErrorBoundary';
import { LoginPage } from './pages/LoginPage';
import { HomePage } from './pages/HomePage';
import { UserPage } from './pages/UserPage';
import { AdminPage } from './pages/AdminPage';
import { StoresPage } from './pages/StoresPage';
import { AnalyticsPage } from './pages/AnalyticsPage';
import { NutritionAnalyticsPage } from './pages/NutritionAnalyticsPage';
function ProtectedRoute({ children, allowedRoles }) {
const { user, role } = useAuth();
if (!user) {
return <Navigate to="/login" replace />;
}
const effectiveRole = role || (user.role === 'store' ? 'user' : user.role);
if (allowedRoles && !allowedRoles.includes(effectiveRole)) {
if (window.location.pathname === '/user') {
return children;
}
return <Navigate to="/user" replace />;
}
return children;
}
export default function App() {
return (
<ErrorBoundary>
<AuthProvider>
<BrowserRouter>
<Routes>
{/* Public Login Route */}
<Route path="/login" element={<LoginPage />} />
{/* Catalog Route - RESTRICTED TO ADMIN ONLY */}
<Route
path="/"
element={
<ProtectedRoute allowedRoles={['admin']}>
<HomePage />
</ProtectedRoute>
}
/>
{/* User Workspace Route */}
<Route
path="/user"
element={
<ProtectedRoute allowedRoles={['admin', 'user', 'store']}>
<UserPage />
</ProtectedRoute>
}
/>
{/* Admin Panel Route - RESTRICTED TO ADMIN ONLY */}
<Route
path="/admin"
element={
<ProtectedRoute allowedRoles={['admin']}>
<AdminPage />
</ProtectedRoute>
}
/>
{/* Store Intelligence Route */}
<Route
path="/stores"
element={
<ProtectedRoute allowedRoles={['admin', 'user', 'store']}>
<StoresPage />
</ProtectedRoute>
}
/>
{/* Analytics Route */}
<Route
path="/analytics"
element={
<ProtectedRoute allowedRoles={['admin', 'user', 'store']}>
<AnalyticsPage />
</ProtectedRoute>
}
/>
{/* Nutrition Intelligence Route */}
<Route
path="/nutrition-analytics"
element={
<ProtectedRoute allowedRoles={['admin', 'user', 'store']}>
<NutritionAnalyticsPage />
</ProtectedRoute>
}
/>
{/* Catch-all redirect */}
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</BrowserRouter>
</AuthProvider>
</ErrorBoundary>
);
}