import { lazy, Suspense } from 'react' import type { View } from '@/App' import type { Timesheet, Invoice, PayrollRun, Worker, ComplianceDocument, Expense, RateCard, DashboardMetrics } from '@/lib/types' import { LoadingSpinner } from '@/components/ui/loading-spinner' import { toast } from 'sonner' const DashboardView = lazy(() => import('@/components/views').then(m => ({ default: m.DashboardView }))) const TimesheetsView = lazy(() => import('@/components/views').then(m => ({ default: m.TimesheetsView }))) const BillingView = lazy(() => import('@/components/views').then(m => ({ default: m.BillingView }))) const PayrollView = lazy(() => import('@/components/views').then(m => ({ default: m.PayrollView }))) const ComplianceView = lazy(() => import('@/components/views').then(m => ({ default: m.ComplianceView }))) const ExpensesView = lazy(() => import('@/components/views').then(m => ({ default: m.ExpensesView }))) const ReportsView = lazy(() => import('@/components/ReportsView').then(m => ({ default: m.ReportsView }))) const CurrencyManagement = lazy(() => import('@/components/CurrencyManagement').then(m => ({ default: m.CurrencyManagement }))) const EmailTemplateManager = lazy(() => import('@/components/EmailTemplateManager').then(m => ({ default: m.EmailTemplateManager }))) const InvoiceTemplateManager = lazy(() => import('@/components/InvoiceTemplateManager').then(m => ({ default: m.InvoiceTemplateManager }))) const QRTimesheetScanner = lazy(() => import('@/components/QRTimesheetScanner').then(m => ({ default: m.QRTimesheetScanner }))) const MissingTimesheetsReport = lazy(() => import('@/components/MissingTimesheetsReport').then(m => ({ default: m.MissingTimesheetsReport }))) const PurchaseOrderManager = lazy(() => import('@/components/PurchaseOrderManager').then(m => ({ default: m.PurchaseOrderManager }))) const OnboardingWorkflowManager = lazy(() => import('@/components/OnboardingWorkflowManager').then(m => ({ default: m.OnboardingWorkflowManager }))) const AuditTrailViewer = lazy(() => import('@/components/AuditTrailViewer').then(m => ({ default: m.AuditTrailViewer }))) const NotificationRulesManager = lazy(() => import('@/components/NotificationRulesManager').then(m => ({ default: m.NotificationRulesManager }))) const BatchImportManager = lazy(() => import('@/components/BatchImportManager').then(m => ({ default: m.BatchImportManager }))) const RateTemplateManager = lazy(() => import('@/components/RateTemplateManager').then(m => ({ default: m.RateTemplateManager }))) const CustomReportBuilder = lazy(() => import('@/components/CustomReportBuilder').then(m => ({ default: m.CustomReportBuilder }))) const HolidayPayManager = lazy(() => import('@/components/HolidayPayManager').then(m => ({ default: m.HolidayPayManager }))) const ContractValidator = lazy(() => import('@/components/ContractValidator').then(m => ({ default: m.ContractValidator }))) const ShiftPatternManager = lazy(() => import('@/components/ShiftPatternManager').then(m => ({ default: m.ShiftPatternManager }))) const QueryLanguageGuide = lazy(() => import('@/components/QueryLanguageGuide').then(m => ({ default: m.QueryLanguageGuide }))) const RoadmapView = lazy(() => import('@/components/roadmap-view').then(m => ({ default: m.RoadmapView }))) const ComponentShowcase = lazy(() => import('@/components/ComponentShowcase').then(m => ({ default: m.ComponentShowcase }))) const BusinessLogicDemo = lazy(() => import('@/components/BusinessLogicDemo').then(m => ({ default: m.BusinessLogicDemo }))) const DataAdminView = lazy(() => import('@/components/views/data-admin-view').then(m => ({ default: m.DataAdminView }))) interface ViewRouterProps { currentView: View searchQuery: string setSearchQuery: (query: string) => void metrics: DashboardMetrics timesheets: Timesheet[] invoices: Invoice[] payrollRuns: PayrollRun[] workers: Worker[] complianceDocs: ComplianceDocument[] expenses: Expense[] rateCards: RateCard[] setTimesheets: (updater: (current: Timesheet[]) => Timesheet[]) => void setPayrollRuns: (updater: (current: PayrollRun[]) => PayrollRun[]) => void actions: any } function LoadingFallback() { return (
) } export function ViewRouter({ currentView, searchQuery, setSearchQuery, metrics, timesheets, invoices, payrollRuns, workers, complianceDocs, expenses, rateCards, setTimesheets, setPayrollRuns, actions }: ViewRouterProps) { const renderView = () => { switch (currentView) { case 'dashboard': return case 'timesheets': return ( ) case 'billing': return ( ) case 'payroll': return ( { setPayrollRuns((current) => [...current, run]) }} /> ) case 'expenses': return ( ) case 'compliance': return ( ) case 'reports': return ( ) case 'missing-timesheets': return ( ) case 'currency': return case 'qr-scanner': return ( { const newTimesheet: Timesheet = { ...timesheet, id: `TS-${Date.now()}`, status: 'pending', submittedDate: new Date().toISOString() } setTimesheets(current => [...current, newTimesheet]) }} /> ) case 'email-templates': return case 'invoice-templates': return case 'purchase-orders': return case 'onboarding': return case 'audit-trail': return case 'notification-rules': return case 'batch-import': return ( { toast.success(`Imported ${data.length} records`) }} /> ) case 'rate-templates': return case 'custom-reports': return ( ) case 'holiday-pay': return case 'contract-validation': return ( ) case 'shift-patterns': return case 'query-guide': return case 'roadmap': return case 'component-showcase': return case 'business-logic-demo': return case 'data-admin': return default: return } } return ( }> {renderView()} ) }