analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
158 lines (150 loc) • 6.9 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } 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; }// src/hooks/useRecommendedLessons.ts
var _react = require('react');
var _zod = require('zod');
var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_dayjs);
var recommendedClassSubjectSchema = _zod.z.object({
id: _zod.z.string().uuid(),
name: _zod.z.string()
}).nullable();
var recommendedClassCreatorSchema = _zod.z.object({
id: _zod.z.string().uuid(),
name: _zod.z.string()
}).nullable();
var recommendedClassStatsSchema = _zod.z.object({
totalStudents: _zod.z.number(),
completedCount: _zod.z.number(),
completionPercentage: _zod.z.number()
});
var recommendedClassBreakdownSchema = _zod.z.object({
classId: _zod.z.string().uuid(),
className: _zod.z.string(),
schoolId: _zod.z.string(),
schoolName: _zod.z.string(),
studentCount: _zod.z.number(),
completedCount: _zod.z.number()
});
var recommendedClassDataSchema = _zod.z.object({
id: _zod.z.string().uuid(),
title: _zod.z.string(),
startDate: _zod.z.string().nullable(),
finalDate: _zod.z.string().nullable(),
createdAt: _zod.z.string(),
progress: _zod.z.number(),
totalLessons: _zod.z.number()
});
var recommendedClassHistoryItemSchema = _zod.z.object({
recommendedClass: recommendedClassDataSchema,
subject: recommendedClassSubjectSchema,
creator: recommendedClassCreatorSchema,
stats: recommendedClassStatsSchema,
breakdown: _zod.z.array(recommendedClassBreakdownSchema)
});
var recommendedClassHistoryApiResponseSchema = _zod.z.object({
message: _zod.z.string(),
data: _zod.z.object({
recommendedClass: _zod.z.array(recommendedClassHistoryItemSchema),
total: _zod.z.number()
})
});
var determineRecommendedClassStatus = (finalDate, completionPercentage) => {
if (completionPercentage === 100) {
return "CONCLU\xCDDA" /* CONCLUIDA */;
}
if (finalDate) {
const now = _dayjs2.default.call(void 0, );
const deadline = _dayjs2.default.call(void 0, finalDate);
if (deadline.isBefore(now)) {
return "VENCIDA" /* VENCIDA */;
}
}
return "ATIVA" /* ATIVA */;
};
var transformRecommendedClassToTableItem = (item) => {
const firstBreakdown = item.breakdown[0];
const schoolName = _optionalChain([firstBreakdown, 'optionalAccess', _ => _.schoolName]) || "-";
const className = _optionalChain([firstBreakdown, 'optionalAccess', _2 => _2.className]) || "-";
const classDisplay = item.breakdown.length > 1 ? `${item.breakdown.length} turmas` : className;
return {
id: item.recommendedClass.id,
startDate: item.recommendedClass.startDate ? _dayjs2.default.call(void 0, item.recommendedClass.startDate).format("DD/MM") : "-",
deadline: item.recommendedClass.finalDate ? _dayjs2.default.call(void 0, item.recommendedClass.finalDate).format("DD/MM") : "-",
title: item.recommendedClass.title,
school: schoolName,
year: "-",
// API doesn't provide year directly
creator: _optionalChain([item, 'access', _3 => _3.creator, 'optionalAccess', _4 => _4.name]) || "-",
creatorId: _nullishCoalesce(_optionalChain([item, 'access', _5 => _5.creator, 'optionalAccess', _6 => _6.id]), () => ( null)),
subject: _optionalChain([item, 'access', _7 => _7.subject, 'optionalAccess', _8 => _8.name]) || "-",
class: classDisplay,
status: determineRecommendedClassStatus(
item.recommendedClass.finalDate,
item.stats.completionPercentage
),
completionPercentage: item.stats.completionPercentage
};
};
var handleRecommendedClassFetchError = (error) => {
if (error instanceof _zod.z.ZodError) {
console.error("Erro ao validar dados de hist\xF3rico de aulas:", error);
return "Erro ao validar dados de hist\xF3rico de aulas";
}
console.error("Erro ao carregar hist\xF3rico de aulas:", error);
return "Erro ao carregar hist\xF3rico de aulas";
};
var createUseRecommendedLessonsHistory = (fetchRecommendedClassHistory) => {
return () => {
const [state, setState] = _react.useState.call(void 0, {
recommendedClass: [],
loading: false,
error: null,
pagination: {
total: 0,
page: 1,
limit: 10,
totalPages: 0
}
});
const fetchRecommendedClass = _react.useCallback.call(void 0,
async (filters) => {
setState((prev) => ({ ...prev, loading: true, error: null }));
try {
const responseData = await fetchRecommendedClassHistory(filters);
const validatedData = recommendedClassHistoryApiResponseSchema.parse(responseData);
const tableItems = validatedData.data.recommendedClass.map(
transformRecommendedClassToTableItem
);
const page = _optionalChain([filters, 'optionalAccess', _9 => _9.page]) || 1;
const limit = _optionalChain([filters, 'optionalAccess', _10 => _10.limit]) || 10;
const total = validatedData.data.total;
const totalPages = Math.ceil(total / limit);
setState({
recommendedClass: tableItems,
loading: false,
error: null,
pagination: {
total,
page,
limit,
totalPages
}
});
} catch (error) {
const errorMessage = handleRecommendedClassFetchError(error);
setState((prev) => ({
...prev,
loading: false,
error: errorMessage
}));
}
},
[fetchRecommendedClassHistory]
);
return {
...state,
fetchRecommendedClass
};
};
};
var createRecommendedLessonsHistoryHook = createUseRecommendedLessonsHistory;
exports.recommendedClassHistoryApiResponseSchema = recommendedClassHistoryApiResponseSchema; exports.determineRecommendedClassStatus = determineRecommendedClassStatus; exports.transformRecommendedClassToTableItem = transformRecommendedClassToTableItem; exports.handleRecommendedClassFetchError = handleRecommendedClassFetchError; exports.createUseRecommendedLessonsHistory = createUseRecommendedLessonsHistory; exports.createRecommendedLessonsHistoryHook = createRecommendedLessonsHistoryHook;
//# sourceMappingURL=chunk-R5QHGGXZ.js.map