New Frontend
This commit is contained in:
302
frontend/src/router/index.tsx
Normal file
302
frontend/src/router/index.tsx
Normal file
@@ -0,0 +1,302 @@
|
||||
import React from 'react';
|
||||
import { createBrowserRouter, Navigate } from 'react-router-dom';
|
||||
import { useSelector } from 'react-redux';
|
||||
|
||||
// Layout components
|
||||
import Layout from '../components/layout/Layout';
|
||||
import AuthLayout from '../components/layout/AuthLayout';
|
||||
|
||||
// Pages
|
||||
import LandingPage from '../pages/landing/LandingPage';
|
||||
import LoginPage from '../pages/auth/LoginPage';
|
||||
import RegisterPage from '../pages/auth/SimpleRegisterPage';
|
||||
import OnboardingPage from '../pages/onboarding/OnboardingPage';
|
||||
import DashboardPage from '../pages/dashboard/DashboardPage';
|
||||
|
||||
// Operations Hub Pages
|
||||
import OperationsLayout from '../components/layout/OperationsLayout';
|
||||
import ProductionPage from '../pages/production/ProductionPage';
|
||||
import OrdersPage from '../pages/orders/OrdersPage';
|
||||
import InventoryPage from '../pages/inventory/InventoryPage';
|
||||
import SalesPage from '../pages/sales/SalesPage';
|
||||
import RecipesPage from '../pages/recipes/RecipesPage';
|
||||
|
||||
// Analytics Hub Pages
|
||||
import AnalyticsLayout from '../components/layout/AnalyticsLayout';
|
||||
import ForecastPage from '../pages/forecast/ForecastPage';
|
||||
import SalesAnalyticsPage from '../pages/analytics/SalesAnalyticsPage';
|
||||
import ProductionReportsPage from '../pages/analytics/ProductionReportsPage';
|
||||
import FinancialReportsPage from '../pages/analytics/FinancialReportsPage';
|
||||
import PerformanceKPIsPage from '../pages/analytics/PerformanceKPIsPage';
|
||||
import AIInsightsPage from '../pages/analytics/AIInsightsPage';
|
||||
|
||||
// Settings Pages
|
||||
import SettingsLayout from '../components/layout/SettingsLayout';
|
||||
import SettingsPage from '../pages/settings/SettingsPage';
|
||||
import UsersManagementPage from '../pages/settings/UsersManagementPage';
|
||||
import BakeriesManagementPage from '../pages/settings/BakeriesManagementPage';
|
||||
import GeneralSettingsPage from '../pages/settings/GeneralSettingsPage';
|
||||
import AccountSettingsPage from '../pages/settings/AccountSettingsPage';
|
||||
|
||||
// Route Guards
|
||||
import ProtectedRoute from '../components/auth/ProtectedRoute';
|
||||
import RoleBasedRoute from '../components/auth/RoleBasedRoute';
|
||||
|
||||
// Add RootState import for type checking
|
||||
import type { RootState } from '../store';
|
||||
|
||||
export const router = createBrowserRouter([
|
||||
// Public Routes
|
||||
{
|
||||
path: '/',
|
||||
element: <AuthLayout />,
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <LandingPage />
|
||||
},
|
||||
{
|
||||
path: 'login',
|
||||
element: <LoginPage />
|
||||
},
|
||||
{
|
||||
path: 'register',
|
||||
element: <RegisterPage />
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Protected Routes
|
||||
{
|
||||
path: '/app',
|
||||
element: (
|
||||
<ProtectedRoute>
|
||||
<Layout />
|
||||
</ProtectedRoute>
|
||||
),
|
||||
children: [
|
||||
// Dashboard
|
||||
{
|
||||
index: true,
|
||||
element: <Navigate to="/app/dashboard" replace />
|
||||
},
|
||||
{
|
||||
path: 'dashboard',
|
||||
element: <DashboardPage />
|
||||
},
|
||||
|
||||
// Onboarding (conditional)
|
||||
{
|
||||
path: 'onboarding',
|
||||
element: <OnboardingPage />
|
||||
},
|
||||
|
||||
// Operations Hub
|
||||
{
|
||||
path: 'operations',
|
||||
element: <OperationsLayout />,
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <Navigate to="/app/operations/production" replace />
|
||||
},
|
||||
{
|
||||
path: 'production',
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <ProductionPage />
|
||||
},
|
||||
{
|
||||
path: 'schedule',
|
||||
element: <ProductionPage view="schedule" />
|
||||
},
|
||||
{
|
||||
path: 'active-batches',
|
||||
element: <ProductionPage view="active-batches" />
|
||||
},
|
||||
{
|
||||
path: 'equipment',
|
||||
element: <ProductionPage view="equipment" />
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'orders',
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <OrdersPage />
|
||||
},
|
||||
{
|
||||
path: 'incoming',
|
||||
element: <OrdersPage view="incoming" />
|
||||
},
|
||||
{
|
||||
path: 'in-progress',
|
||||
element: <OrdersPage view="in-progress" />
|
||||
},
|
||||
{
|
||||
path: 'supplier-orders',
|
||||
element: <OrdersPage view="supplier-orders" />
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'inventory',
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <InventoryPage />
|
||||
},
|
||||
{
|
||||
path: 'stock-levels',
|
||||
element: <InventoryPage view="stock-levels" />
|
||||
},
|
||||
{
|
||||
path: 'movements',
|
||||
element: <InventoryPage view="movements" />
|
||||
},
|
||||
{
|
||||
path: 'alerts',
|
||||
element: <InventoryPage view="alerts" />
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'sales',
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <SalesPage />
|
||||
},
|
||||
{
|
||||
path: 'daily-sales',
|
||||
element: <SalesPage view="daily-sales" />
|
||||
},
|
||||
{
|
||||
path: 'customer-orders',
|
||||
element: <SalesPage view="customer-orders" />
|
||||
},
|
||||
{
|
||||
path: 'pos-integration',
|
||||
element: <SalesPage view="pos-integration" />
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: 'recipes',
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <RecipesPage />
|
||||
},
|
||||
{
|
||||
path: 'active-recipes',
|
||||
element: <RecipesPage view="active-recipes" />
|
||||
},
|
||||
{
|
||||
path: 'development',
|
||||
element: (
|
||||
<RoleBasedRoute requiredRoles={['admin', 'manager']}>
|
||||
<RecipesPage view="development" />
|
||||
</RoleBasedRoute>
|
||||
)
|
||||
},
|
||||
{
|
||||
path: 'costing',
|
||||
element: (
|
||||
<RoleBasedRoute requiredRoles={['admin', 'manager']}>
|
||||
<RecipesPage view="costing" />
|
||||
</RoleBasedRoute>
|
||||
)
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Analytics Hub (Admin/Manager only)
|
||||
{
|
||||
path: 'analytics',
|
||||
element: (
|
||||
<RoleBasedRoute requiredRoles={['admin', 'manager']}>
|
||||
<AnalyticsLayout />
|
||||
</RoleBasedRoute>
|
||||
),
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <Navigate to="/app/analytics/forecasting" replace />
|
||||
},
|
||||
{
|
||||
path: 'forecasting',
|
||||
element: <ForecastPage />
|
||||
},
|
||||
{
|
||||
path: 'sales-analytics',
|
||||
element: <SalesAnalyticsPage />
|
||||
},
|
||||
{
|
||||
path: 'production-reports',
|
||||
element: <ProductionReportsPage />
|
||||
},
|
||||
{
|
||||
path: 'financial-reports',
|
||||
element: <FinancialReportsPage />
|
||||
},
|
||||
{
|
||||
path: 'performance-kpis',
|
||||
element: <PerformanceKPIsPage />
|
||||
},
|
||||
{
|
||||
path: 'ai-insights',
|
||||
element: <AIInsightsPage />
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Settings Hub
|
||||
{
|
||||
path: 'settings',
|
||||
element: <SettingsLayout />,
|
||||
children: [
|
||||
{
|
||||
index: true,
|
||||
element: <Navigate to="/app/settings/general" replace />
|
||||
},
|
||||
{
|
||||
path: 'general',
|
||||
element: <GeneralSettingsPage />
|
||||
},
|
||||
{
|
||||
path: 'users',
|
||||
element: (
|
||||
<RoleBasedRoute requiredRoles={['admin']}>
|
||||
<UsersManagementPage />
|
||||
</RoleBasedRoute>
|
||||
)
|
||||
},
|
||||
{
|
||||
path: 'bakeries',
|
||||
element: (
|
||||
<RoleBasedRoute requiredRoles={['admin']}>
|
||||
<BakeriesManagementPage />
|
||||
</RoleBasedRoute>
|
||||
)
|
||||
},
|
||||
{
|
||||
path: 'account',
|
||||
element: <AccountSettingsPage />
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Catch all route
|
||||
{
|
||||
path: '*',
|
||||
element: <Navigate to="/" replace />
|
||||
}
|
||||
]);
|
||||
Reference in New Issue
Block a user