diff --git a/services/frontend/src/components/PopulationComponents/CourseTableModeSelector.tsx b/services/frontend/src/components/PopulationComponents/CourseTableModeSelector.tsx index b0b13b005..114d80f6a 100644 --- a/services/frontend/src/components/PopulationComponents/CourseTableModeSelector.tsx +++ b/services/frontend/src/components/PopulationComponents/CourseTableModeSelector.tsx @@ -6,12 +6,11 @@ import Typography from '@mui/material/Typography' import type { Dispatch, SetStateAction } from 'react' import { StudentAmountLimiter } from '@/components/common/StudentAmountLimiter' -import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums' +import { useCurriculum } from '@/hooks/useCurriculum' type CourseTableModeSelectorProps = { courseTableMode: 'curriculum' | 'all' setCourseTableMode: Dispatch> - curriculum: ExtendedCurriculumDetails | null studentAmountLimit: number onStudentAmountLimitChange: (input: string) => void } @@ -20,47 +19,50 @@ export const CourseTableModeSelector = ({ courseTableMode, onStudentAmountLimitChange, setCourseTableMode, - curriculum, studentAmountLimit, -}: CourseTableModeSelectorProps) => ( - - setCourseTableMode('curriculum')} - size="small" - /> - } - label={ - - Curriculum - - {curriculum?.name ?? 'unavailable'} - - - } - /> - +}: CourseTableModeSelectorProps) => { + const { curriculum } = useCurriculum() + + return ( + - setCourseTableMode('all')} size="small" /> - onStudentAmountLimitChange(value.toString())} - studentAmountLimit={studentAmountLimit} - /> - + setCourseTableMode('curriculum')} + size="small" + /> + } + label={ + + Curriculum + + {curriculum?.name ?? 'unavailable'} + + } - label="" - value={'all'} /> - - -) + + + setCourseTableMode('all')} size="small" /> + onStudentAmountLimitChange(value.toString())} + studentAmountLimit={studentAmountLimit} + /> + + } + label="" + value={'all'} + /> + + + ) +} diff --git a/services/frontend/src/components/PopulationComponents/PopulationCourses/index.tsx b/services/frontend/src/components/PopulationComponents/PopulationCourses/index.tsx index 54732e601..0ed7550c9 100644 --- a/services/frontend/src/components/PopulationComponents/PopulationCourses/index.tsx +++ b/services/frontend/src/components/PopulationComponents/PopulationCourses/index.tsx @@ -5,7 +5,6 @@ import { FilterDegreeCoursesModal } from '@/components/PopulationComponents/Popu import { PopulationCourseStats } from '@/components/PopulationCourseStats' import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat' import { SegmentDimmer } from '@/components/SegmentDimmer' -import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums' import { PopulationQuery } from '@/types/populationSearch' import { FilteredCourse } from '@/util/coursesOfPopulation' @@ -14,7 +13,6 @@ export const PopulationCourses = ({ query, filteredCourses, onlyIamRights, - curriculum, courseTableMode, studentAmountLimit, setShowModules, @@ -24,7 +22,6 @@ export const PopulationCourses = ({ query: Pick filteredCourses: FilteredCourse[] onlyIamRights: boolean - curriculum: ExtendedCurriculumDetails courseTableMode: 'curriculum' | 'all' studentAmountLimit: number setShowModules: (input: boolean) => void @@ -47,7 +44,6 @@ export const PopulationCourses = ({ {courseTableMode === 'curriculum' ? ( @@ -263,13 +262,8 @@ const gradeOrdering = ['0', 'Hyl.', 'TT', 'HT', '1', '2', '3', '4', '5', 'Hyv.'] const compareCourseGrades = (previous: StudentCourse, current: StudentCourse) => gradeOrdering.indexOf(previous.grade) <= gradeOrdering.indexOf(current.grade) -export const CoursesTabContainer = ({ - curriculum, - students, - courses, - idToGroupIdMap, - programme, -}: CoursesTabContainerProps) => { +export const CoursesTabContainer = ({ students, courses, idToGroupIdMap, programme }: CoursesTabContainerProps) => { + const { curriculum } = useCurriculum() const { visible: namesVisible } = useStudentNameVisibility() const [includeSubstitutions, toggleIncludeSubstitutions] = useToggle(true) @@ -279,7 +273,10 @@ export const CoursesTabContainer = ({ ) const curriculumCourses = useMemo( - () => [...curriculum.defaultProgrammeCourses, ...curriculum.secondProgrammeCourses].filter(nonVisible), + () => + curriculum + ? [...curriculum.defaultProgrammeCourses, ...curriculum.secondProgrammeCourses].filter(nonVisible) + : [], [curriculum] ) diff --git a/services/frontend/src/components/PopulationComponents/Students/Table/ModulesTab/index.tsx b/services/frontend/src/components/PopulationComponents/Students/Table/ModulesTab/index.tsx index b7cd588aa..0694f9964 100644 --- a/services/frontend/src/components/PopulationComponents/Students/Table/ModulesTab/index.tsx +++ b/services/frontend/src/components/PopulationComponents/Students/Table/ModulesTab/index.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react' import { ModulesTab } from '@/components/PopulationComponents/Students/Table/ModulesTab/ModulesTable' -import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums' +import { useCurriculum } from '@/hooks/useCurriculum' import { FilteredCourse } from '@/util/coursesOfPopulation' import { createLocaleComparator } from '@/util/comparator' import { formatISODate } from '@/util/timeAndDate' @@ -86,18 +86,17 @@ const getDegreeProgrammeCodes = (curriculumModules): string[] => { } export const ModulesTabContainer = ({ - curriculum, students, courses, idToGroupIdMap, programme, }: { - curriculum: ExtendedCurriculumDetails | null | undefined students: Student[] courses: FilteredCourse[] idToGroupIdMap: Record programme: string }) => { + const { curriculum } = useCurriculum() const curriculumModules = useMemo( () => (curriculum ? [...curriculum.defaultProgrammeModules, ...curriculum.secondProgrammeModules] : []), [curriculum] diff --git a/services/frontend/src/components/PopulationComponents/Students/Table/ProgressTab/index.tsx b/services/frontend/src/components/PopulationComponents/Students/Table/ProgressTab/index.tsx index 942e3f6b0..41bc50be2 100644 --- a/services/frontend/src/components/PopulationComponents/Students/Table/ProgressTab/index.tsx +++ b/services/frontend/src/components/PopulationComponents/Students/Table/ProgressTab/index.tsx @@ -17,7 +17,7 @@ import { CopyStudentNumbersHeader } from '@/components/OodiTable/common/CopyStud import { OodiTableExcelExport } from '@/components/OodiTable/excelExport' import { TableInfo } from '@/components/PopulationComponents/Students/Table/ProgressTab/info' import { DateFormat } from '@/constants/date' -import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums' +import { useCurriculum } from '@/hooks/useCurriculum' import { useSemesters } from '@/hooks/useSemesters' import { useGetProgressCriteriaQuery } from '@/redux/progressCriteria' import { CheckIcon, CloseIcon, EditIcon, RemoveIcon, SwapHorizIcon } from '@/theme' @@ -226,14 +226,12 @@ type Label = { } export const ProgressTable = ({ - curriculum, idToGroupIdMap, students, months, programme, studyGuidanceGroupProgramme, }: { - curriculum?: ExtendedCurriculumDetails | null idToGroupIdMap: IdToGroupId students: FormattedStudent[] months: number @@ -242,6 +240,7 @@ export const ProgressTable = ({ }) => { const { visible: namesVisible } = useStudentNameVisibility() const { getTextIn } = useLanguage() + const { curriculum } = useCurriculum() const { data: criteria } = useGetProgressCriteriaQuery({ programmeCode: programme }, { skip: !programme }) const { semesters: allSemesters } = useSemesters() const isStudyGuidanceGroupProgramme = studyGuidanceGroupProgramme !== '' diff --git a/services/frontend/src/components/PopulationComponents/Students/index.tsx b/services/frontend/src/components/PopulationComponents/Students/index.tsx index f3af8158f..ad13d98d8 100644 --- a/services/frontend/src/components/PopulationComponents/Students/index.tsx +++ b/services/frontend/src/components/PopulationComponents/Students/index.tsx @@ -13,7 +13,6 @@ import { type FormattedStudentData, GeneralTab } from '@/components/PopulationCo import { ModulesTabContainer as ModulesTab } from '@/components/PopulationComponents/Students/Table/ModulesTab' import { ProgressTable as ProgressTab } from '@/components/PopulationComponents/Students/Table/ProgressTab' import { TagsTab } from '@/components/PopulationComponents/Students/Table/TagsTab' -import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums' import { FilteredCourse } from '@/util/coursesOfPopulation' import { useParseQueryParams } from '@/util/queryparams' import { isBachelorOrLicentiateProgramme } from '@/util/studyProgramme' @@ -29,7 +28,6 @@ type PopulationDetails = CommonProps & { variant: 'population' programme: string combinedProgramme?: string - curriculum: ExtendedCurriculumDetails | null filteredCourses: FilteredCourse[] idToGroupIdMap: Record } @@ -40,7 +38,6 @@ type CoursePopulation = CommonProps & { type StudyGuidanceGroup = CommonProps & { variant: 'studyGuidanceGroupPopulation' - curriculum: ExtendedCurriculumDetails | null studyGuidanceGroup: any year: string filteredCourses: FilteredCourse[] @@ -63,7 +60,6 @@ export const PopulationStudents = ({ variant, programme, combinedProgramme, - curriculum, filteredStudents, filteredCourses, idToGroupIdMap, @@ -101,7 +97,6 @@ export const PopulationStudents = ({ Courses: ( , Progress: ( void @@ -33,15 +32,17 @@ export const PopulationCourseStats = ({ filteredCourses, pending, onlyIamRights, - curriculum, courseTableMode, showModules, setShowModules, }: PopulationCourseStatsProps) => { + const { curriculum } = useCurriculum() const [modules, setModules] = useState([]) const [tab, setTab] = useState(0) useEffect(() => { + if (!curriculum) return + // Change courses type from FilteredCourse[] to FilteredProgrammeCourse[] + add module-field to object so we can deconstruct it below const modules: Record< string, diff --git a/services/frontend/src/components/PopulationDetails/index.tsx b/services/frontend/src/components/PopulationDetails/index.tsx index 7a0f919ec..dc90801b8 100644 --- a/services/frontend/src/components/PopulationDetails/index.tsx +++ b/services/frontend/src/components/PopulationDetails/index.tsx @@ -128,14 +128,12 @@ const PopulationDetailsContent = ({ <> columnsGeneralTab({ group })} diff --git a/services/frontend/src/components/StudyGuidanceGroups/StudyGuidanceGroupPopulationCourses.tsx b/services/frontend/src/components/StudyGuidanceGroups/StudyGuidanceGroupPopulationCourses.tsx index 62c78fc23..818f20e46 100644 --- a/services/frontend/src/components/StudyGuidanceGroups/StudyGuidanceGroupPopulationCourses.tsx +++ b/services/frontend/src/components/StudyGuidanceGroups/StudyGuidanceGroupPopulationCourses.tsx @@ -6,7 +6,7 @@ import { PopulationCourseStats } from '@/components/PopulationCourseStats' import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat' import { useDebouncedState } from '@/hooks/debouncedState' -export const StudyGuidanceGroupPopulationCourses = ({ filteredCourses, studyProgramme, year, curriculum }) => { +export const StudyGuidanceGroupPopulationCourses = ({ filteredCourses, studyProgramme, year }) => { const [studentAmountLimit, setStudentAmountLimit] = useDebouncedState(0, 1000) const curriculumsAvailable = studyProgramme && year const [courseTableMode, setCourseTableMode] = useState<'all' | 'curriculum'>( @@ -23,7 +23,6 @@ export const StudyGuidanceGroupPopulationCourses = ({ filteredCourses, studyProg {curriculumsAvailable ? ( {children} } -/** Context variant of the curriculum hook */ +/** Context-aware variant of the curriculum hook. Use this in population statistics views. */ export const useCurriculum = () => { const context = useContext(CurriculumContext) if (!context) {