# Hook: useClassroomsList **Version:** 1.0.0 **Fecha:** 2025-12-18 **Ubicacion:** `apps/frontend/src/apps/admin/hooks/useClassroomsList.ts` --- ## PROPOSITO Hook simple y especializado para obtener lista de aulas (classrooms) para selectores en el modulo de progreso administrativo. Reemplaza datos mock con datos reales del API. --- ## API ### Parametros de Entrada ```typescript interface UseClassroomsListParams { schoolId?: string; // Filtrar por institucion especifica enabled?: boolean; // Control de ejecucion (default: true) } ``` ### Retorno ```typescript interface UseClassroomsListReturn { classrooms: ClassroomBasic[]; // Lista de aulas isLoading: boolean; // Estado de carga error: Error | null; // Error si aplica refetch: () => void; // Funcion para recargar } ``` --- ## CONFIGURACION DE REACT QUERY | Configuracion | Valor | |---------------|-------| | Query Key | `['admin', 'classrooms', schoolId]` | | staleTime | 5 minutos | | gcTime | 10 minutos | | refetchOnFocus | false | | retry | 2 intentos | --- ## EJEMPLO DE USO ### Basico ```typescript import { useClassroomsList } from '../hooks/useClassroomsList'; function ClassroomSelector() { const { classrooms, isLoading, error } = useClassroomsList(); if (isLoading) return ; if (error) return ; return ( ); } ``` ### Con Filtro por Institucion ```typescript function ClassroomSelectorBySchool({ schoolId }: { schoolId: string }) { const { classrooms, isLoading, error, refetch } = useClassroomsList({ schoolId, enabled: !!schoolId }); // Solo ejecuta query cuando schoolId esta disponible return (
); } ``` ### Control Manual de Ejecucion ```typescript function ConditionalClassrooms() { const [shouldFetch, setShouldFetch] = useState(false); const { classrooms, isLoading } = useClassroomsList({ enabled: shouldFetch }); return (
{isLoading && } {classrooms.length > 0 && }
); } ``` --- ## DEPENDENCIAS | Dependencia | Uso | |-------------|-----| | @tanstack/react-query | Gestion de queries | | @/services/api/adminAPI | Cliente API | | @/services/api/adminTypes | Tipos (ClassroomBasic) | --- ## TIPOS RELACIONADOS ### ClassroomBasic ```typescript interface ClassroomBasic { id: string; name: string; grade?: string; section?: string; schoolId?: string; teacherId?: string; studentCount?: number; isActive?: boolean; } ``` --- ## NOTAS DE IMPLEMENTACION 1. **Cache inteligente:** El query se invalida automaticamente cuando cambia `schoolId` 2. **Fallback a array vacio:** Si el API falla, retorna array vacio en lugar de undefined 3. **Retry limitado:** Maximo 2 reintentos para evitar sobrecarga --- ## REFERENCIAS - `AdminProgressPage.tsx` - Pagina que usa este hook - `adminAPI.ts` - Cliente API - `adminTypes.ts` - Definiciones de tipos --- **Ultima actualizacion:** 2025-12-18