New Frontend

This commit is contained in:
Urtzi Alfaro
2025-08-16 20:13:40 +02:00
parent 23c5f50111
commit 8914786973
35 changed files with 4223 additions and 538 deletions

View 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 />
}
]);