UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

142 lines 3.76 kB
import type { BaseApiClient } from '../types/api'; import { StudentAnswerStatus, type ExamDetailsData, type ExamStudentResult, type ExamDetailsPagination, type ExamDetailsFilters } from '../types/examDetails'; /** * Student activity status from backend */ declare enum StudentActivityStatus { AGUARDANDO_RESPOSTA = "AGUARDANDO_RESPOSTA", NAO_ENTREGUE = "NAO_ENTREGUE", CONCLUIDO = "CONCLUIDO", AGUARDANDO_CORRECAO = "AGUARDANDO_CORRECAO" } /** * API student type */ interface ApiExamStudent { studentId: string; studentName: string; answeredAt: string | null; timeSpent: number; score: number | null; status: StudentActivityStatus; } /** * API breakdown item type */ interface ApiBreakdownItem { school: { id: string; name: string; } | null; schoolYear: { id: string; name: string; } | null; class: { id: string; name: string; } | null; totalStudents: number; answeredStudents: number; completionPercentage: number; } /** * Exam details API response type */ export interface ExamDetailsApiResponse { message: string; data: { students: ApiExamStudent[]; pagination: { total: number; page: number; limit: number; totalPages: number; }; generalStats: { averageScore: number; completionPercentage: number; }; questionStats: { mostCorrect: number[]; mostIncorrect: number[]; notAnswered: number[]; }; breakdown: ApiBreakdownItem[]; }; } /** * Exam info API response type */ export interface ExamInfoApiResponse { message: string; data: { id: string; title: string; startDate: string | null; createdAt: string; [key: string]: unknown; }; } /** * Hook state interface */ export interface UseExamDetailsState { examData: ExamDetailsData | null; loading: boolean; error: string | null; pagination: ExamDetailsPagination; } /** * Hook return type */ export interface UseExamDetailsReturn extends UseExamDetailsState { fetchExamDetails: (examId: string, filters?: ExamDetailsFilters) => Promise<void>; } /** * Default pagination values */ export declare const DEFAULT_EXAM_DETAILS_PAGINATION: ExamDetailsPagination; /** * Map backend status to frontend status */ export declare const mapBackendStatusToFrontend: (status: StudentActivityStatus) => StudentAnswerStatus; /** * Transform API student to frontend format */ export declare const transformStudent: (student: ApiExamStudent) => ExamStudentResult; /** * Handle errors during exam fetch */ export declare const handleExamDetailsFetchError: (error: unknown) => string; /** * Factory function to create useExamDetails hook * * @param apiClient - API client instance (axios, fetch wrapper, etc.) * @returns Hook for managing exam details * * @example * ```tsx * // In your app setup * import { createUseExamDetails } from 'analytica-frontend-lib'; * import api from '@/services/apiService'; * * export const useExamDetails = createUseExamDetails(api); * * // In your component * const { examData, loading, error, pagination, fetchExamDetails } = useExamDetails(); * * useEffect(() => { * if (examId) { * fetchExamDetails(examId, { page: 1, limit: 10 }); * } * }, [examId]); * ``` */ export declare const createUseExamDetails: (apiClient: BaseApiClient) => () => UseExamDetailsReturn; /** * Alias for createUseExamDetails */ export declare const createExamDetailsHook: (apiClient: BaseApiClient) => () => UseExamDetailsReturn; export {}; //# sourceMappingURL=useExamDetails.d.ts.map