)}
{/* Tab Progress Content - Envolver el contenido existente */}
{!loading && !error && activeTab === 'progress' && (
<>
{/* Todo el contenido existente de progreso va aqui */}
{/* ClassProgressDashboard, Tips card, etc. */}
>
)}
```
---
### 3.2 GamilitSidebar.tsx - REMOVER ITEM ANALYTICS
**Ruta:** `/home/isem/workspace/projects/gamilit/apps/frontend/src/shared/components/layout/GamilitSidebar.tsx`
**Accion:** Este cambio YA esta incluido en FASE 5A. El item `analytics` se remueve junto con los otros items en esa fase.
**Verificacion:** Confirmar que en SPEC-FASE-5A-SIDEBAR.md el item con id `analytics` esta en la lista de items removidos.
---
## 4. ORDEN DE IMPLEMENTACION
```yaml
Paso_1:
descripcion: "Agregar imports necesarios a TeacherProgressPage"
archivo: TeacherProgressPage.tsx
lineas: "1-30 (imports)"
riesgo: BAJO
Paso_2:
descripcion: "Agregar nuevos estados y queries"
archivo: TeacherProgressPage.tsx
ubicacion: "Dentro del componente, despues de estados existentes"
riesgo: MEDIO
Paso_3:
descripcion: "Agregar funciones auxiliares"
archivo: TeacherProgressPage.tsx
ubicacion: "Despues de los estados, antes del return"
riesgo: BAJO
Paso_4:
descripcion: "Agregar Tab Switcher en JSX"
archivo: TeacherProgressPage.tsx
ubicacion: "Despues del selector de clase"
riesgo: MEDIO
Paso_5:
descripcion: "Envolver contenido existente en condicional activeTab === 'progress'"
archivo: TeacherProgressPage.tsx
ubicacion: "Todo el contenido actual de progreso"
riesgo: ALTO
Paso_6:
descripcion: "Agregar seccion de contenido engagement"
archivo: TeacherProgressPage.tsx
ubicacion: "Despues del contenido de progress"
riesgo: MEDIO
Paso_7:
descripcion: "Verificar que GamilitSidebar no tiene item analytics (FASE 5A)"
archivo: GamilitSidebar.tsx
riesgo: BAJO
```
---
## 5. DEPENDENCIAS Y HOOKS
### 5.1 Hooks Reutilizados
| Hook | Origen | Uso en TeacherProgressPage |
|------|--------|---------------------------|
| `useAnalytics` | `../hooks/useAnalytics` | Obtener datos de engagement |
| `useClassrooms` | YA EXISTE | Selector de clase (existente) |
| `useClassroomsStats` | YA EXISTE | Stats agregadas (existente) |
### 5.2 APIs Utilizadas
| API | Endpoint | Metodo |
|-----|----------|--------|
| `analyticsApi.getClassroomAnalytics` | `/teacher/analytics` | GET |
| `analyticsApi.getEngagementMetrics` | `/teacher/analytics/engagement` | GET |
| `analyticsApi.generateReport` | `/teacher/reports` | POST |
### 5.3 Tipos Requeridos
```typescript
// Importar desde @apps/teacher/types
import type { ClassroomAnalytics, EngagementMetrics } from '@apps/teacher/types';
// Importar desde @services/api/teacher/analyticsApi
import type {
GetAnalyticsQueryDto,
GetEngagementMetricsDto,
GenerateReportsDto,
Report,
} from '@services/api/teacher/analyticsApi';
```
---
## 6. PLAN DE PRUEBAS
### 6.1 Pruebas Manuales
```yaml
Prueba_1_Tab_Switching:
precondicion: "Login como teacher, navegar a /teacher/progress"
pasos:
- Verificar que aparecen dos tabs: Progreso y Engagement
- Click en tab Engagement
- Verificar que se muestra mensaje de seleccionar clase
- Click en tab Progreso
- Verificar que se muestra el contenido original
resultado_esperado: "Tabs funcionan correctamente"
Prueba_2_Engagement_Data:
precondicion: "Login como teacher, navegar a /teacher/progress"
pasos:
- Seleccionar una clase especifica
- Click en tab Engagement
- Verificar que se cargan datos (DAU, WAU, etc.)
- Verificar filtro de fechas
- Click en Exportar CSV
resultado_esperado: "Datos de engagement se muestran correctamente"
Prueba_3_Progress_Unchanged:
precondicion: "Login como teacher, navegar a /teacher/progress"
pasos:
- Seleccionar clase
- Verificar ClassProgressDashboard funciona
- Verificar tips card visible
- Verificar estadisticas generales
resultado_esperado: "Funcionalidad de progreso no afectada"
Prueba_4_Analytics_Route:
precondicion: "Login como teacher"
pasos:
- Navegar directamente a /teacher/analytics
- Verificar que la pagina carga (ruta mantenida)
resultado_esperado: "Ruta legacy funcional"
Prueba_5_Sidebar_Analytics_Removed:
precondicion: "Login como teacher"
pasos:
- Verificar que el sidebar NO muestra item "Analiticas"
- Verificar que SI muestra item "Progreso"
resultado_esperado: "Sidebar correcto despues de FASE 5A"
```
### 6.2 Criterios de Aceptacion
- [ ] Tab switcher visible y funcional
- [ ] Tab Progreso muestra contenido original sin cambios
- [ ] Tab Engagement muestra metricas cuando hay clase seleccionada
- [ ] Tab Engagement muestra mensaje apropiado cuando no hay clase
- [ ] Filtro de fechas funciona
- [ ] Exportar CSV funciona
- [ ] Comparacion con periodo anterior visible
- [ ] Tabla de uso de funcionalidades visible (si hay datos)
- [ ] No hay errores en consola
- [ ] Loading states correctos
- [ ] Error handling correcto
---
## 7. ROLLBACK
En caso de necesitar revertir:
1. **Restaurar TeacherProgressPage.tsx:**
- Revertir a version anterior sin tabs
- Remover imports de analytics
- Remover estados de engagement
2. **Restaurar GamilitSidebar.tsx:**
- Agregar item analytics de vuelta al array teacherItems
- Este paso depende de si FASE 5A se revierte tambien
3. **No hay archivos eliminados:**
- TeacherAnalyticsPage.tsx sigue existiendo
- Ruta /teacher/analytics sigue funcional
---
## 8. CONSIDERACIONES TECNICAS
### 8.1 Performance
```yaml
Optimizaciones_implementadas:
- useMemo para queries (evita re-fetches innecesarios)
- Carga condicional de engagement (solo cuando tab activo)
- Queries undefined cuando no hay classroom seleccionado
Carga_lazy:
- Datos de engagement NO se cargan hasta que:
1. Tab engagement esta activo
2. Una clase especifica esta seleccionada
```
### 8.2 UX Considerations
```yaml
Flujo_usuario:
1. Usuario entra a /teacher/progress
2. Ve contenido de progreso por defecto
3. Si quiere engagement, click en tab
4. Debe seleccionar clase primero
5. Se muestran metricas de engagement
Mensajes_claros:
- "Selecciona una clase" cuando no hay clase seleccionada
- Loading spinner mientras carga
- Error con boton de reintentar
```
### 8.3 Compatibilidad
```yaml
Rutas_legacy:
- /teacher/analytics: FUNCIONAL (no se elimina)
- Bookmarks existentes: FUNCIONAN
- Links externos: FUNCIONAN
Recomendacion_futura:
- Agregar redirect de /teacher/analytics a /teacher/progress#engagement
- Esto puede hacerse en una fase posterior
```
---
## 9. ESTRUCTURA FINAL DEL ARCHIVO
```
TeacherProgressPage.tsx (despues de cambios)
├── Imports (originales + nuevos de engagement)
├── ChartJS.register()
├── safeFormat() helper
├── TeacherProgressPage component
│ ├── Estados originales (selectedClassroomId, showClassroomDropdown)
│ ├── Estados nuevos (activeTab, dateRange)
│ ├── Hooks originales (useClassrooms, useClassroomsStats, useUserGamification)
│ ├── Hooks nuevos (useAnalytics - condicional)
│ ├── useMemo (selectedClassroomName, overallStats, analyticsQuery, engagementQuery)
│ ├── Funciones (handleLogout, exportToCSV)
│ └── JSX
│ ├── Header
│ ├── Loading/Error states
│ ├── Stats cards (cuando all selected)
│ ├── Classroom selector
│ ├── Tab switcher (NUEVO)
│ ├── Tab Progress content (contenido original envuelto)
│ └── Tab Engagement content (NUEVO)
```
---
## 10. NOTAS ADICIONALES
### Sobre la ruta /teacher/analytics
La pagina TeacherAnalyticsPage.tsx NO se elimina. Permanece funcional para:
- Usuarios con bookmarks
- Links externos
- Compatibilidad hacia atras
En una fase futura se puede agregar un redirect automatico.
### Sobre el orden de ejecucion
Esta fase (5C) DEBE ejecutarse DESPUES de FASE 5A porque:
1. FASE 5A remueve el item "Analiticas" del sidebar
2. Sin este cambio, habria dos formas de acceder a la misma funcionalidad
### Sobre testing
Se recomienda hacer testing manual exhaustivo porque:
1. La funcionalidad de progreso NO debe cambiar
2. La funcionalidad de engagement debe ser identica a TeacherAnalytics
3. Los tabs deben funcionar correctamente
---
**Estado:** LISTO PARA IMPLEMENTAR
**Prerequisitos:** FASE 5A completada
**Siguiente fase:** Validacion final y ejecucion