feat: fix hotspot test

This commit is contained in:
2026-01-22 16:52:36 -03:00
parent 957539d201
commit fa8ca6cb61
20 changed files with 247 additions and 39 deletions
@@ -22,12 +22,12 @@ export default function StudentCalendarPage({ params }: { params: { id: string }
useEffect(() => {
const loadData = async () => {
try {
const courseData = await lmsApi.getCourseOutline(params.id);
setCourse(courseData);
const { course, modules } = await lmsApi.getCourseOutline(params.id);
setCourse({ ...course, modules });
// Flatten lessons from modules
const allLessons: Lesson[] = [];
courseData.modules?.forEach(mod => {
modules?.forEach(mod => {
mod.lessons.forEach(lesson => {
allLessons.push(lesson);
});
@@ -74,8 +74,8 @@ export default function StudentCalendarPage({ params }: { params: { id: string }
<Link key={lesson.id} href={`/courses/${params.id}/lessons/${lesson.id}`}>
<div
className={`text-[9px] p-1 rounded truncate flex items-center gap-1 mb-1 border transition-all hover:scale-[1.02] ${lesson.important_date_type === 'exam' ? 'bg-red-500/10 text-red-400 border-red-500/20' :
lesson.important_date_type === 'assignment' ? 'bg-blue-500/10 text-blue-400 border-blue-500/20' :
'bg-green-500/10 text-green-400 border-green-500/20'
lesson.important_date_type === 'assignment' ? 'bg-blue-500/10 text-blue-400 border-blue-500/20' :
'bg-green-500/10 text-green-400 border-green-500/20'
}`}
>
<span className="w-1 h-1 rounded-full bg-current"></span>
@@ -34,12 +34,12 @@ export default function LessonPlayerPage({ params }: { params: { id: string, les
useEffect(() => {
const fetchAll = async () => {
try {
const [lessonData, courseData] = await Promise.all([
const [lessonData, outlineData] = await Promise.all([
lmsApi.getLesson(params.lessonId),
lmsApi.getCourseOutline(params.id)
]);
setLesson(lessonData);
setCourse(courseData);
setCourse({ ...outlineData.course, modules: outlineData.modules });
if (user) {
const grades = await lmsApi.getUserGrades(user.id, params.id);
@@ -84,11 +84,25 @@ export default function LessonPlayerPage({ params }: { params: { id: string, les
[blockId]: score
};
// Calculate overall lesson score as average of block scores
const blocks = lesson.metadata?.blocks || [];
const interactiveBlocks = blocks.filter((b: any) =>
!['description', 'media', 'document'].includes(b.type)
);
const scores = interactiveBlocks.map((b: any) =>
b.id === blockId ? score : currentBlockScores[b.id] || 0
);
const newOverallScore = scores.length > 0
? (scores.reduce((a: number, b: number) => a + b, 0) / scores.length) * 100
: 100;
const res = await lmsApi.submitScore(
user.id,
params.id,
params.lessonId,
userGrade?.score || 0, // Keep overall score for now, or calculate average/sum
newOverallScore,
{ ...userGrade?.metadata, block_scores: newBlockScores }
);
setUserGrade(res);
@@ -220,6 +234,7 @@ export default function LessonPlayerPage({ params }: { params: { id: string, les
}
}}
isGraded={lesson.is_graded}
hasTranscription={!!lesson.transcription}
/>
);
case 'document':
+3 -3
View File
@@ -14,7 +14,7 @@ export default function CourseOutlinePage({ params }: { params: { id: string } }
useEffect(() => {
lmsApi.getCourseOutline(params.id)
.then(setCourseData)
.then(data => setCourseData({ ...data.course, modules: data.modules }))
.catch(console.error)
.finally(() => setLoading(false));
@@ -129,8 +129,8 @@ export default function CourseOutlinePage({ params }: { params: { id: string } }
<div className="space-y-3">
<div className="flex items-center gap-3">
<div className={`px-2 py-0.5 rounded text-[9px] font-black uppercase tracking-widest ${rec.priority === 'high' ? 'bg-red-500/10 text-red-400 border border-red-500/20' :
rec.priority === 'medium' ? 'bg-yellow-500/10 text-yellow-400 border border-yellow-500/20' :
'bg-green-500/10 text-green-400 border border-green-500/20'
rec.priority === 'medium' ? 'bg-yellow-500/10 text-yellow-400 border border-yellow-500/20' :
'bg-green-500/10 text-green-400 border border-green-500/20'
}`}>
Prioridad {rec.priority}
</div>
@@ -32,8 +32,8 @@ export default function StudentProgressPage() {
const loadData = React.useCallback(async () => {
try {
const courseData = await lmsApi.getCourseOutline(id);
setCourse(courseData);
const { course, modules, grading_categories } = await lmsApi.getCourseOutline(id);
setCourse({ ...course, modules, grading_categories });
if (user) {
const grades = await lmsApi.getUserGrades(user.id, id);