Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Backend: - Fix email verification and password recovery services - Fix exercise submission and student progress services Frontend: - Update missions, password, and profile API services - Fix ExerciseContentRenderer component Docs & Scripts: - Add SSL/Certbot deployment guide - Add quick deployment guide - Database scripts for testing and validations - Migration and homologation reports - Functions inventory documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
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
interface UseClassroomsListParams {
schoolId?: string; // Filtrar por institucion especifica
enabled?: boolean; // Control de ejecucion (default: true)
}
Retorno
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
import { useClassroomsList } from '../hooks/useClassroomsList';
function ClassroomSelector() {
const { classrooms, isLoading, error } = useClassroomsList();
if (isLoading) return <Spinner />;
if (error) return <ErrorMessage error={error} />;
return (
<select>
{classrooms.map(classroom => (
<option key={classroom.id} value={classroom.id}>
{classroom.name}
</option>
))}
</select>
);
}
Con Filtro por Institucion
function ClassroomSelectorBySchool({ schoolId }: { schoolId: string }) {
const { classrooms, isLoading, error, refetch } = useClassroomsList({
schoolId,
enabled: !!schoolId
});
// Solo ejecuta query cuando schoolId esta disponible
return (
<div>
<button onClick={() => refetch()}>Actualizar</button>
<ClassroomList classrooms={classrooms} />
</div>
);
}
Control Manual de Ejecucion
function ConditionalClassrooms() {
const [shouldFetch, setShouldFetch] = useState(false);
const { classrooms, isLoading } = useClassroomsList({
enabled: shouldFetch
});
return (
<div>
<button onClick={() => setShouldFetch(true)}>
Cargar Aulas
</button>
{isLoading && <Spinner />}
{classrooms.length > 0 && <ClassroomList classrooms={classrooms} />}
</div>
);
}
DEPENDENCIAS
| Dependencia | Uso |
|---|---|
| @tanstack/react-query | Gestion de queries |
| @/services/api/adminAPI | Cliente API |
| @/services/api/adminTypes | Tipos (ClassroomBasic) |
TIPOS RELACIONADOS
ClassroomBasic
interface ClassroomBasic {
id: string;
name: string;
grade?: string;
section?: string;
schoolId?: string;
teacherId?: string;
studentCount?: number;
isActive?: boolean;
}
NOTAS DE IMPLEMENTACION
- Cache inteligente: El query se invalida automaticamente cuando cambia
schoolId - Fallback a array vacio: Si el API falla, retorna array vacio en lugar de undefined
- Retry limitado: Maximo 2 reintentos para evitar sobrecarga
REFERENCIAS
AdminProgressPage.tsx- Pagina que usa este hookadminAPI.ts- Cliente APIadminTypes.ts- Definiciones de tipos
Ultima actualizacion: 2025-12-18