feat: initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
||||
import { useAuthStore } from './store/auth'
|
||||
import Layout from './components/layout/Layout'
|
||||
import LoginPage from './pages/Login'
|
||||
import DashboardPage from './pages/Dashboard'
|
||||
import OrdersPage from './pages/Orders'
|
||||
import OrderDetailPage from './pages/OrderDetail'
|
||||
import NewOrderPage from './pages/NewOrder'
|
||||
import UploadPage from './pages/Upload'
|
||||
import AdminPage from './pages/Admin'
|
||||
import CadPreviewPage from './pages/CadPreview'
|
||||
import MaterialsPage from './pages/Materials'
|
||||
import WorkerActivityPage from './pages/WorkerActivity'
|
||||
import ProductLibraryPage from './pages/ProductLibrary'
|
||||
import ProductDetailPage from './pages/ProductDetail'
|
||||
import NewProductOrderPage from './pages/NewProductOrder'
|
||||
import NotificationsPage from './pages/Notifications'
|
||||
import PreferencesPage from './pages/Preferences'
|
||||
|
||||
function ProtectedRoute({ children }: { children: React.ReactNode }) {
|
||||
const token = useAuthStore((s) => s.token)
|
||||
if (!token) return <Navigate to="/login" replace />
|
||||
return <>{children}</>
|
||||
}
|
||||
|
||||
function AdminRoute({ children }: { children: React.ReactNode }) {
|
||||
const { token, user } = useAuthStore()
|
||||
if (!token) return <Navigate to="/login" replace />
|
||||
if (user?.role !== 'admin' && user?.role !== 'project_manager') return <Navigate to="/" replace />
|
||||
return <>{children}</>
|
||||
}
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
<Route path="/login" element={<LoginPage />} />
|
||||
<Route
|
||||
path="/"
|
||||
element={
|
||||
<ProtectedRoute>
|
||||
<Layout />
|
||||
</ProtectedRoute>
|
||||
}
|
||||
>
|
||||
<Route index element={<DashboardPage />} />
|
||||
<Route path="orders" element={<OrdersPage />} />
|
||||
<Route path="orders/new" element={<NewOrderPage />} />
|
||||
<Route path="orders/new/product" element={<NewProductOrderPage />} />
|
||||
<Route path="orders/:id" element={<OrderDetailPage />} />
|
||||
<Route path="upload" element={<UploadPage />} />
|
||||
<Route
|
||||
path="admin"
|
||||
element={
|
||||
<AdminRoute>
|
||||
<AdminPage />
|
||||
</AdminRoute>
|
||||
}
|
||||
/>
|
||||
<Route path="materials" element={<MaterialsPage />} />
|
||||
<Route path="activity" element={<WorkerActivityPage />} />
|
||||
<Route path="products" element={<ProductLibraryPage />} />
|
||||
<Route path="products/:id" element={<ProductDetailPage />} />
|
||||
<Route path="notifications" element={<NotificationsPage />} />
|
||||
<Route path="preferences" element={<PreferencesPage />} />
|
||||
<Route path="cad/:id" element={<CadPreviewPage />} />
|
||||
</Route>
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user