feat: MVP Fase 0 — Process Cost Platform v0.1.0
Plataforma completa de análisis de costos operativos basada en BPMN 2.0. Funcionalidades incluidas: - Import de archivos BPMN 2.0 por drag & drop + 3 procesos de ejemplo - Visualización read-only del diagrama (bpmn-js) - Configuración de actividades (costo, tiempo, recursos asignados) - CRUD de recursos (rol, persona, sistema, equipo, insumo) - Configuración global (moneda, overhead %, nombre, cliente) - Motor de simulación determinístico agregado con propagación de gateways XOR/AND - Reporte visual con mapa de calor en dos modos (relativo/absoluto) - Gráficos: KPIs, top actividades, composición, costo por recurso - Export PDF (jsPDF + html2canvas) y CSV (papaparse) - Persistencia en IndexedDB (Dexie) - 268 tests unitarios/integración + 6 E2E con Playwright - Deploy: https://process-cost-platform.pages.dev Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
51
src/router.tsx
Normal file
51
src/router.tsx
Normal file
@@ -0,0 +1,51 @@
|
||||
import { lazy, Suspense } from 'react'
|
||||
import { createRouter, createRootRoute, createRoute, Outlet } from '@tanstack/react-router'
|
||||
import { WorkspacePage } from '@/features/workspace/WorkspacePage'
|
||||
import { ImportPage } from '@/features/import/ImportPage'
|
||||
import { Loader2 } from 'lucide-react'
|
||||
|
||||
// ECharts es grande (373KB gzip). Lazy-load del ReportPage para que el
|
||||
// bundle inicial no lo incluya — se carga solo cuando el usuario llega al reporte.
|
||||
const ReportPage = lazy(() =>
|
||||
import('@/features/report/ReportPage').then((m) => ({ default: m.ReportPage }))
|
||||
)
|
||||
|
||||
function ReportPageWithSuspense() {
|
||||
return (
|
||||
<Suspense fallback={
|
||||
<div className="min-h-screen flex flex-col items-center justify-center gap-3 bg-slate-50">
|
||||
<Loader2 className="h-8 w-8 animate-spin text-primary" />
|
||||
<p className="text-sm text-slate-400">Cargando reporte…</p>
|
||||
</div>
|
||||
}>
|
||||
<ReportPage />
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
const rootRoute = createRootRoute({ component: () => <Outlet /> })
|
||||
|
||||
const indexRoute = createRoute({
|
||||
getParentRoute: () => rootRoute,
|
||||
path: '/',
|
||||
component: ImportPage,
|
||||
})
|
||||
|
||||
const workspaceRoute = createRoute({
|
||||
getParentRoute: () => rootRoute,
|
||||
path: '/workspace/$processId',
|
||||
component: WorkspacePage,
|
||||
})
|
||||
|
||||
const reportRoute = createRoute({
|
||||
getParentRoute: () => rootRoute,
|
||||
path: '/report/$processId',
|
||||
component: ReportPageWithSuspense,
|
||||
})
|
||||
|
||||
const routeTree = rootRoute.addChildren([indexRoute, workspaceRoute, reportRoute])
|
||||
export const router = createRouter({ routeTree })
|
||||
|
||||
declare module '@tanstack/react-router' {
|
||||
interface Register { router: typeof router }
|
||||
}
|
||||
Reference in New Issue
Block a user