analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
145 lines (131 loc) • 6.03 kB
JavaScript
;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