fix(home): show all active subjects in upcoming assessments

Use shared active-subject helpers from assessments overview instead of
the first folder with an active flag and code-only filtering.
This commit is contained in:
2026-06-22 21:22:19 +09:30
parent 4b7aa8da75
commit 6f7788497a
2 changed files with 91 additions and 16 deletions
@@ -101,6 +101,34 @@ export function assessmentBelongsToActiveSubjects(
return activeSubjects.some((subject) => subject.code === code);
}
export function activeSubjectForAssessment(
assessment: Record<string, unknown>,
activeSubjects: OverviewSubject[],
): OverviewSubject | undefined {
const programme = Number(
assessment.programmeID ?? assessment.programme,
);
const metaclass = Number(
assessment.metaclassID ?? assessment.metaclass,
);
if (
programme &&
metaclass &&
!Number.isNaN(programme) &&
!Number.isNaN(metaclass)
) {
const subject = activeSubjects.find(
(s) => s.programme === programme && s.metaclass === metaclass,
);
if (subject) return subject;
}
const code = String(assessment.code ?? assessment.subject ?? "").trim();
if (!code) return undefined;
return activeSubjects.find((s) => s.code === code);
}
export function filterAssessmentsForActiveSubjects<T extends Record<string, unknown>>(
assessments: T[],
activeSubjects: OverviewSubject[],
@@ -110,6 +138,24 @@ export function filterAssessmentsForActiveSubjects<T extends Record<string, unkn
);
}
/** Active subjects that have at least one assessment in the given list. */
export function subjectsWithUpcomingAssessments(
assessments: Record<string, unknown>[],
activeSubjects: OverviewSubject[],
): OverviewSubject[] {
const result: OverviewSubject[] = [];
const seen = new Set<string>();
for (const assessment of assessments) {
const subject = activeSubjectForAssessment(assessment, activeSubjects);
if (!subject || seen.has(subject.code)) continue;
seen.add(subject.code);
result.push(subject);
}
return result;
}
export function formatDate(dateStr: string, submitted?: boolean): string {
const d = new Date(dateStr);
const now = new Date();