Agregar un nuevo sub-modulo de conocimiento al Centro de Aprendizaje (/aprendizaje). Usar cuando se necesite agregar contenido de capacitacion para tecnicos — manuales, simuladores, guias, troubleshooting, etc.
Agregar un nuevo sub-modulo al Centro de Aprendizaje para tecnicos de planta.
/aprendizaje → LearningHubPage.tsx (hub con cards)
/aprendizaje/baader-200 → Baader200LearningPublicPage.tsx (manual interactivo)
/aprendizaje/hmi-knuro → HmiKnuroPublicPage.tsx (simulador parametros)
/aprendizaje/<nuevo-modulo> → NuevoModuloPage.tsx (lo que vas a crear)
| Archivo | Propósito |
|---|---|
apps/pwa/src/pages/LearningHubPage.tsx | Hub con array modules[] — agregar card aquí |
apps/pwa/src/App.tsx | Rutas — agregar lazy import + Route aquí |
apps/pwa/src/components/layout/MainLayout.tsx | Sidebar — ya tiene link a /aprendizaje |
apps/pwa/src/services/ | Servicios Firestore para datos del modulo |
apps/pwa/public/ | Archivos HTML embed si el modulo usa iframe |
Baader200LearningPage.tsx + baader-200-learn-embed.htmlHmiKnuroPage.tsx + hmi-knuro-embed.htmlapps/pwa/src/pages/<NombreModulo>PublicPage.tsx
Baader200LearningPublicPage.tsx o HmiKnuroPublicPage.tsxapps/pwa/src/pages/<NombreModulo>Page.tsx
Baader200LearningPage.tsx o HmiKnuroPage.tsxapps/pwa/src/services/<nombreModulo>.ts
<modulo>-sections, <modulo>-config, <modulo>-historybaader200Learning.ts o hmiKnuro.tsapps/pwa/public/<nombre-modulo>-embed.html
baader-200-learn-embed.htmlAbrir apps/pwa/src/pages/LearningHubPage.tsx y agregar al array modules[]:
{
id: '<slug-del-modulo>',
title: '<Nombre Visible>',
subtitle: '<Subtitulo corto>',
description: '<Descripcion de 1-2 lineas>',
icon: <LucideIcon>, // importar de lucide-react
href: '/aprendizaje/<slug>',
enabled: true,
stats: '<N secciones · Feature destacada>',
color: '#rrggbb', // color de acento unico
},
Si el modulo ya estaba como placeholder (enabled:false), solo cambiar enabled: true y completar los campos.
// Lazy import (junto a los otros ~linea 90)
const NuevoModuloPage = lazyWithReload(() =>
import('@/pages/NuevoModuloPublicPage').then((mod) => ({ default: mod.NuevoModuloPublicPage }))
)
// Rutas publicas (dentro del bloque de rutas publicas ~linea 253)
<Route path="/aprendizaje/<slug>/:itemId" element={
<Suspense fallback={<LoadingScreen />}><NuevoModuloPage /></Suspense>
} />
<Route path="/aprendizaje/<slug>" element={
<Suspense fallback={<LoadingScreen />}><NuevoModuloPage /></Suspense>
} />
// Ruta admin (dentro de adminRoutes ~linea 440, solo si tiene pagina admin)
<Route path="<slug>" element={
<AdminRoute><Suspense fallback={<LoadingScreen />}><NuevoModuloAdminPage /></Suspense></AdminRoute>
} />
Solo si el modulo tiene pagina admin de edicion:
// En adminNavigation[] (~linea 71)
{ name: '<Nombre>', href: '/<slug>', icon: <Icon> },
<modulo>-sections → Contenido principal (secciones, pasos, imagenes)
<modulo>-config → Configuracion (orden, ajustes globales)
<modulo>-history → Historial de cambios (audit log)
Agregar en storage.rules:
match /<modulo>-images/{allPaths=**} {
allow read;
allow write: if request.auth != null;
}
/aprendizaje — la card del nuevo modulo debe aparecer/aprendizaje/<slug>/hmi-knuro o equivalente permite editar| Modulo | Color | Hex | Estado |
|---|---|---|---|
| Baader 200 | Azul | #4499ff | ✅ Activo |
| HMI Knuro | Verde | #44ddaa | ✅ Activo |
| Seguridad en Planta | Naranja | #ff6644 | ✅ Activo (/aprendizaje/seguridad) |
| Marel | Morado | #aa66ff | ✅ Activo (/aprendizaje/marel) |
| Disponibles | Amarillo #ffcc44, Rosa #ff66aa, Cyan #44ccdd | — | Libres |
apps/pwa/src/pages/<Nombre>Page.tsx — pagina React con seccionesLearningHubPage.tsx: agregar card al array modules[] con enabled: trueApp.tsx: agregar <Route path="/aprendizaje/<slug>" element={...} />