UNPKG

analytica-frontend-lib

Version:

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

145 lines (131 loc) 6.03 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkFVIK3TDVjs = require('./chunk-FVIK3TDV.js'); // src/hooks/useExamDetails.ts var _react = require('react'); var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_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 ? _dayjs2.default.call(void 0, student.answeredAt).format("DD MMM YYYY") : null, score: student.score }); var handleExamDetailsFetchError = _chunkFVIK3TDVjs.createFetchErrorHandler.call(void 0, "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] = _react.useState.call(void 0, { examData: null, loading: false, error: null, pagination: DEFAULT_EXAM_DETAILS_PAGINATION }); const fetchExamDetails = _react.useCallback.call(void 0, 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) => _optionalChain([b, 'access', _ => _.school, 'optionalAccess', _2 => _2.name])).filter((name) => !!name) ) ]; const classNames = [ ...new Set( breakdown.map((b) => _optionalChain([b, 'access', _3 => _3.class, 'optionalAccess', _4 => _4.name])).filter((name) => !!name) ) ]; const examData = { id: examInfo.data.id, title: examInfo.data.title, startDate: examInfo.data.startDate ? _dayjs2.default.call(void 0, examInfo.data.startDate).format("DD/MM/YYYY") : "-", school: schoolNames.length > 0 ? schoolNames.join(", ") : "-", className: classNames.length > 0 ? classNames.join(", ") : "-", createdAt: _dayjs2.default.call(void 0, 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; exports.StudentAnswerStatus = StudentAnswerStatus; exports.StudentAnswerDisplayStatus = StudentAnswerDisplayStatus; exports.DEFAULT_EXAM_DETAILS_PAGINATION = DEFAULT_EXAM_DETAILS_PAGINATION; exports.mapBackendStatusToFrontend = mapBackendStatusToFrontend; exports.transformStudent = transformStudent; exports.handleExamDetailsFetchError = handleExamDetailsFetchError; exports.createUseExamDetails = createUseExamDetails; exports.createExamDetailsHook = createExamDetailsHook; //# sourceMappingURL=chunk-CGW6WT6Y.js.map