diff --git a/frontend/src/view/professor/ProfessorDashboard.vue b/frontend/src/view/professor/ProfessorDashboard.vue index 2c6775a..9ebae90 100644 --- a/frontend/src/view/professor/ProfessorDashboard.vue +++ b/frontend/src/view/professor/ProfessorDashboard.vue @@ -15,11 +15,10 @@ const { t } = useI18n({ useScope: "global" }); const router = useRouter(); import { fetchProfessorModules, type ApiModule } from "../../api/fetchProfessorModules"; -type ModuleWithScore = Module & { confidenceScore: number }; - const modules = ref(new Array(10)); const selectedModules = ref([]); const loading = ref(true); +const confidenceScores = ref>(new Map()); const filters = ref({ name: { @@ -44,35 +43,35 @@ onMounted(async () => { const result = await fetchProfessorModules(); // Convert API response to Module instances with all required fields - const moduleObjects = result.map((apiModule: ApiModule) => new Module( - apiModule.uuid, - apiModule.name, - apiModule.course, - apiModule.eventType || "", - apiModule.name, // userDefinedName defaults to module name - apiModule.prof, - apiModule.semester, - false, // reminder defaults to false - [] // events defaults to empty array - )); + const moduleObjects = result.map((apiModule: ApiModule) => { + const module = new Module( + apiModule.uuid, + apiModule.name, + apiModule.course, + apiModule.eventType || "", + apiModule.name, // userDefinedName defaults to module name + apiModule.prof, + apiModule.semester, + false, // reminder defaults to false + [] // events defaults to empty array + ); + // Store confidence score separately + confidenceScores.value.set(module.uuid, apiModule.confidenceScore || 0); + return module; + }); // Sort modules by confidence score (highest first) - // Note: confidenceScore is not part of Module class, so we need to preserve it - const sortedModules = moduleObjects.map((module: Module, index: number) => { - const originalData = result[index]; - return { - ...module, - confidenceScore: originalData.confidenceScore || 0 - }; - }).sort((a: ModuleWithScore, b: ModuleWithScore) => { - return (b.confidenceScore || 0) - (a.confidenceScore || 0); // Descending order + const sortedModules = moduleObjects.sort((a: Module, b: Module) => { + const scoreA = confidenceScores.value.get(a.uuid) || 0; + const scoreB = confidenceScores.value.get(b.uuid) || 0; + return scoreB - scoreA; // Descending order }); // Clear temporary entries and set actual modules modules.value = sortedModules; // Pre-select modules with confidence score >= 0.7 (good match or better) - selectedModules.value = sortedModules.filter((m: ModuleWithScore) => (m.confidenceScore || 0) >= 0.7); + selectedModules.value = sortedModules.filter((m: Module) => (confidenceScores.value.get(m.uuid) || 0) >= 0.7); console.log("Modules loaded:", modules.value.length, "Pre-selected:", selectedModules.value.length); } catch (error: unknown) { @@ -186,23 +185,23 @@ const createCalendar = () => { - +