Skip to content

Commit 3a5c780

Browse files
ZiyaSelimCopilot
andcommitted
Update uml evlauation and tutor view
Co-authored-by: Copilot <copilot@github.com>
1 parent 96b69ce commit 3a5c780

9 files changed

Lines changed: 4631 additions & 141 deletions

File tree

app/courses/[courseId]/uml/[umlId]/lecturer.tsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,18 @@ import {
1313
Tabs,
1414
} from "@mui/material";
1515
import { useParams } from "next/navigation";
16+
import { useMemo, useState } from "react";
1617
import { useLazyLoadQuery, useMutation } from "react-relay";
1718

1819
import {
20+
umlApiFindUserInfosQuery,
1921
umlApiGetLecturerExerciseOverviewQuery,
2022
umlApiUpdateTutorSolutionMutation,
2123
} from "@/components/hylimo/api/UmlApi";
2224
import { getSemanticModel } from "@/components/hylimo/semanticModelGenerator";
2325
import { AddUMLAssignmentModal } from "@/components/uml-assignment/AddUMLAssignmentModal";
2426
import ExerciseInfoTab from "@/components/uml-assignment/ExerciseInfoTab";
2527
import SubmissionsTab from "@/components/uml-assignment/SubmissionsTab";
26-
import { useState } from "react";
2728

2829
export default function LecturerUmlAssignment() {
2930
const { umlId } = useParams();
@@ -38,6 +39,36 @@ export default function LecturerUmlAssignment() {
3839
{ fetchPolicy: "network-only", fetchKey: refreshKey }
3940
);
4041

42+
const studentIds = useMemo(() => {
43+
const ids =
44+
data?.getUmlExerciseByAssessmentId?.studentSubmissions?.map(
45+
(sub: any) => sub.studentId
46+
) || [];
47+
48+
// Defensive: filter out empty values and duplicates before querying user infos.
49+
return Array.from(new Set(ids.filter((id: any) => typeof id === "string" && id.length > 0)));
50+
}, [data?.getUmlExerciseByAssessmentId?.studentSubmissions]);
51+
52+
// Fetch user infos for all students
53+
const userInfosData = useLazyLoadQuery<any>(
54+
umlApiFindUserInfosQuery,
55+
{ ids: studentIds },
56+
{ fetchPolicy: "network-only" }
57+
);
58+
59+
const userInfos = useMemo(() => {
60+
const userMap: Record<string, any> = {};
61+
if (userInfosData?.findUserInfos) {
62+
userInfosData.findUserInfos.forEach((user: any) => {
63+
// Backend may return null entries when referenced users no longer exist.
64+
if (user?.id) {
65+
userMap[user.id] = user;
66+
}
67+
});
68+
}
69+
return userMap;
70+
}, [userInfosData?.findUserInfos]);
71+
4172
const [updateTutorSolution, isUpdating] = useMutation(
4273
umlApiUpdateTutorSolutionMutation
4374
);
@@ -114,7 +145,7 @@ export default function LecturerUmlAssignment() {
114145
isUpdating={isUpdating}
115146
/>
116147
) : tabIndex === 1 ? (
117-
<SubmissionsTab exercise={exercise} />
148+
<SubmissionsTab exercise={exercise} userInfos={userInfos} />
118149
) : null}
119150
</Box>
120151
{isEditModalOpen && exercise && content && (

app/courses/[courseId]/uml/[umlId]/page.tsx

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import StudentUMLAssignment from "@/app/courses/[courseId]/uml/[umlId]/student";
55
import { PageError } from "@/components/PageError";
66
import { PageView, usePageView } from "@/src/currentView";
77
import { isUUID } from "@/src/utils";
8-
import ConstructionIcon from "@mui/icons-material/Construction";
9-
import { Alert, AlertTitle, Container } from "@mui/material";
8+
import { Container } from "@mui/material";
109
import { useParams } from "next/navigation";
1110

1211
export default function UMLAssignmentPage() {
@@ -24,20 +23,6 @@ export default function UMLAssignmentPage() {
2423
case PageView.Lecturer:
2524
return (
2625
<Container maxWidth={false} sx={{ py: 2 }}>
27-
{/* WIP Disclaimer */}
28-
<Alert
29-
severity="warning"
30-
icon={<ConstructionIcon fontSize="inherit" />}
31-
sx={{ mb: 3, borderRadius: 2 }}
32-
>
33-
<AlertTitle sx={{ fontWeight: "bold" }}>
34-
Work in Progress (WIP)
35-
</AlertTitle>
36-
The Lecturer view for UML assignments is currently under
37-
development. Features like manual feedback overrides and class
38-
statistics are not yet finalized.
39-
</Alert>
40-
4126
<LecturerUmlAssignment />
4227
</Container>
4328
);

0 commit comments

Comments
 (0)