[Filters][Grade] Fix No grade option not working

This commit is contained in:
Aaro Koivukangas
2026-09-01 11:42:55 +03:00
parent cc1630f982
commit f8f5c4ba32
2 changed files with 22 additions and 5 deletions
@@ -6,6 +6,7 @@ import Typography from '@mui/material/Typography'
import { getHighestGradeOfCourseBetweenRange } from '@/common'
import { createFilter, FilterTrayProps } from '@/components/FilterView/filters/createFilter'
import { FormattedStudent } from '@oodikone/shared/types'
import { dateIsBetween } from '@oodikone/shared/util/datetime'
type Options = any
type Args = any
@@ -76,17 +77,21 @@ export const gradeFilter = createFilter<Options, Args, Precompute>({
student =>
[
student.studentNumber,
student.courses.filter((course: any) => args.courseCodes.includes(course.course_code)),
student.courses.filter(
(course: any) =>
args.courseCodes.includes(course.course_code) &&
dateIsBetween(course.date, new Date(args.from), new Date(args.to))
),
] as [string, FormattedStudent['courses']]
)
.map(([studentNumber, courses]) => [
studentNumber,
getHighestGradeOfCourseBetweenRange(courses, args.from, args.to),
])
.filter(([_, grade]) => grade !== undefined)
.reduce((acc, [studentNumber, grade]) => {
acc[grade!] ??= []
acc[grade!].push(studentNumber)
const fixedGrade = grade ?? 'No grade'
acc[fixedGrade] ??= []
acc[fixedGrade].push(studentNumber)
return acc
}, {}),
}
@@ -27,7 +27,7 @@ void describe('gradeFilter', () => {
const precomputed = gradeFilter().precompute!({ students: [student], options: { selected: [] }, args: ARGS })
assert.deepStrictEqual(precomputed.grades, {})
assert.deepStrictEqual(precomputed.grades, { 'No grade': [student.studentNumber] })
})
void it('should include a student whose grade is selected', () => {
@@ -54,6 +54,18 @@ void describe('gradeFilter', () => {
assert.strictEqual(result, false)
})
void it('should include student with no grade in No grade', () => {
const student = createStudent({ courses: [] })
const result = gradeFilter().filter(student, {
args: ARGS,
options: { selected: ['No grade'] },
precomputed: { grades: { 'No grade': [student.studentNumber] } },
})
assert.strictEqual(result, true)
})
void it('isActive should match the filter state', () => {
assert.strictEqual(gradeFilter().isActive({ selected: ['5'] }, undefined), true)
assert.strictEqual(gradeFilter().isActive({ selected: [] }, undefined), false)