UNPKG

analytica-frontend-lib

Version:

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

145 lines (141 loc) 4.79 kB
import { createFetchErrorHandler } from "./chunk-UANZJ7NH.mjs"; // src/hooks/useExamDetails.ts import { useState, useCallback } from "react"; import dayjs from "dayjs"; // src/types/examDetails.ts var StudentAnswerStatus = /* @__PURE__ */ ((StudentAnswerStatus2) => { StudentAnswerStatus2["AWAITING_ANSWER_SHEET"] = "AWAITING_ANSWER_SHEET"; StudentAnswerStatus2["ANSWER_SHEET_RECEIVED"] = "ANSWER_SHEET_RECEIVED"; return StudentAnswerStatus2; })(StudentAnswerStatus || {}); var StudentAnswerDisplayStatus = /* @__PURE__ */ ((StudentAnswerDisplayStatus2) => { StudentAnswerDisplayStatus2["AWAITING_ANSWER_SHEET"] = "Aguardando gabarito"; StudentAnswerDisplayStatus2["ANSWER_SHEET_RECEIVED"] = "Gabarito recebido"; return StudentAnswerDisplayStatus2; })(StudentAnswerDisplayStatus || {}); // src/hooks/useExamDetails.ts var DEFAULT_EXAM_DETAILS_PAGINATION = { total: 0, page: 1, limit: 10, totalPages: 0 }; var mapBackendStatusToFrontend = (status) => { if (status === "CONCLUIDO" /* CONCLUIDO */ || status === "AGUARDANDO_CORRECAO" /* AGUARDANDO_CORRECAO */) { return "ANSWER_SHEET_RECEIVED" /* ANSWER_SHEET_RECEIVED */; } return "AWAITING_ANSWER_SHEET" /* AWAITING_ANSWER_SHEET */; }; var transformStudent = (student) => ({ id: student.studentId, studentId: student.studentId, studentName: student.studentName, status: mapBackendStatusToFrontend(student.status), answerReceivedAt: student.answeredAt ? dayjs(student.answeredAt).format("DD MMM YYYY") : null, score: student.score }); var handleExamDetailsFetchError = createFetchErrorHandler( "Erro ao validar dados de detalhes da prova", "Erro ao carregar detalhes da prova" ); var buildQueryParams = (filters) => { if (!filters) return {}; const params = {}; for (const key in filters) { const value = filters[key]; if (value !== void 0 && value !== null) { params[key] = value; } } return params; }; var useExamDetailsImpl = (apiClient) => { const [state, setState] = useState({ examData: null, loading: false, error: null, pagination: DEFAULT_EXAM_DETAILS_PAGINATION }); const fetchExamDetails = useCallback( async (examId, filters) => { setState((prev) => ({ ...prev, loading: true, error: null })); try { const params = buildQueryParams(filters); const [examInfoResponse, examDetailsResponse] = await Promise.all([ apiClient.get(`/activities/${examId}/quiz`), apiClient.get( `/activities/${examId}/details`, { params } ) ]); const examInfo = examInfoResponse.data; const examDetails = examDetailsResponse.data; const students = examDetails.data.students.map(transformStudent); const stats = { averageScore: examDetails.data.generalStats.averageScore, mostCorrectQuestions: examDetails.data.questionStats.mostCorrect, mostIncorrectQuestions: examDetails.data.questionStats.mostIncorrect, unansweredQuestions: examDetails.data.questionStats.notAnswered }; const breakdown = examDetails.data.breakdown; const schoolNames = [ ...new Set( breakdown.map((b) => b.school?.name).filter((name) => !!name) ) ]; const classNames = [ ...new Set( breakdown.map((b) => b.class?.name).filter((name) => !!name) ) ]; const examData = { id: examInfo.data.id, title: examInfo.data.title, startDate: examInfo.data.startDate ? dayjs(examInfo.data.startDate).format("DD/MM/YYYY") : "-", school: schoolNames.length > 0 ? schoolNames.join(", ") : "-", className: classNames.length > 0 ? classNames.join(", ") : "-", createdAt: dayjs(examInfo.data.createdAt).format("DD/MM/YYYY"), stats, students }; setState({ examData, loading: false, error: null, pagination: examDetails.data.pagination }); } catch (error) { const errorMessage = handleExamDetailsFetchError(error); setState((prev) => ({ ...prev, loading: false, error: errorMessage })); } }, [apiClient] ); return { ...state, fetchExamDetails }; }; var createUseExamDetails = (apiClient) => { return () => useExamDetailsImpl(apiClient); }; var createExamDetailsHook = createUseExamDetails; export { StudentAnswerStatus, StudentAnswerDisplayStatus, DEFAULT_EXAM_DETAILS_PAGINATION, mapBackendStatusToFrontend, transformStudent, handleExamDetailsFetchError, createUseExamDetails, createExamDetailsHook }; //# sourceMappingURL=chunk-JLZKEHDF.mjs.map