mirror of
https://github.com/UniversityOfHelsinkiCS/oodikone.git
synced 2026-10-12 19:03:39 +03:00
[Hooks] make use of curriculum context
This commit is contained in:
@@ -6,12 +6,11 @@ import Typography from '@mui/material/Typography'
|
|||||||
import type { Dispatch, SetStateAction } from 'react'
|
import type { Dispatch, SetStateAction } from 'react'
|
||||||
|
|
||||||
import { StudentAmountLimiter } from '@/components/common/StudentAmountLimiter'
|
import { StudentAmountLimiter } from '@/components/common/StudentAmountLimiter'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
import { useCurriculum } from '@/hooks/useCurriculum'
|
||||||
|
|
||||||
type CourseTableModeSelectorProps = {
|
type CourseTableModeSelectorProps = {
|
||||||
courseTableMode: 'curriculum' | 'all'
|
courseTableMode: 'curriculum' | 'all'
|
||||||
setCourseTableMode: Dispatch<SetStateAction<'curriculum' | 'all'>>
|
setCourseTableMode: Dispatch<SetStateAction<'curriculum' | 'all'>>
|
||||||
curriculum: ExtendedCurriculumDetails | null
|
|
||||||
studentAmountLimit: number
|
studentAmountLimit: number
|
||||||
onStudentAmountLimitChange: (input: string) => void
|
onStudentAmountLimitChange: (input: string) => void
|
||||||
}
|
}
|
||||||
@@ -20,47 +19,50 @@ export const CourseTableModeSelector = ({
|
|||||||
courseTableMode,
|
courseTableMode,
|
||||||
onStudentAmountLimitChange,
|
onStudentAmountLimitChange,
|
||||||
setCourseTableMode,
|
setCourseTableMode,
|
||||||
curriculum,
|
|
||||||
studentAmountLimit,
|
studentAmountLimit,
|
||||||
}: CourseTableModeSelectorProps) => (
|
}: CourseTableModeSelectorProps) => {
|
||||||
<RadioGroup>
|
const { curriculum } = useCurriculum()
|
||||||
<FormControlLabel
|
|
||||||
control={
|
return (
|
||||||
<Radio
|
<RadioGroup>
|
||||||
checked={courseTableMode === 'curriculum'}
|
|
||||||
onChange={() => setCourseTableMode('curriculum')}
|
|
||||||
size="small"
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
label={
|
|
||||||
<Stack flexDirection="row" gap={1} sx={{ alignContent: 'center' }}>
|
|
||||||
<Typography fontWeight={500}>Curriculum</Typography>
|
|
||||||
<Typography
|
|
||||||
fontWeight={800}
|
|
||||||
sx={{
|
|
||||||
color: courseTableMode === 'curriculum' ? 'text.primary' : 'text.disabled',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{curriculum?.name ?? 'unavailable'}
|
|
||||||
</Typography>
|
|
||||||
</Stack>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<Stack direction="row" sx={{ alignItems: 'center', mt: '0.5em' }}>
|
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
control={
|
control={
|
||||||
<>
|
<Radio
|
||||||
<Radio checked={courseTableMode === 'all'} onChange={() => setCourseTableMode('all')} size="small" />
|
checked={courseTableMode === 'curriculum'}
|
||||||
<StudentAmountLimiter
|
onChange={() => setCourseTableMode('curriculum')}
|
||||||
disabled={courseTableMode !== 'all'}
|
size="small"
|
||||||
onStudentAmountLimitChange={value => onStudentAmountLimitChange(value.toString())}
|
/>
|
||||||
studentAmountLimit={studentAmountLimit}
|
}
|
||||||
/>
|
label={
|
||||||
</>
|
<Stack flexDirection="row" gap={1} sx={{ alignContent: 'center' }}>
|
||||||
|
<Typography fontWeight={500}>Curriculum</Typography>
|
||||||
|
<Typography
|
||||||
|
fontWeight={800}
|
||||||
|
sx={{
|
||||||
|
color: courseTableMode === 'curriculum' ? 'text.primary' : 'text.disabled',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{curriculum?.name ?? 'unavailable'}
|
||||||
|
</Typography>
|
||||||
|
</Stack>
|
||||||
}
|
}
|
||||||
label=""
|
|
||||||
value={'all'}
|
|
||||||
/>
|
/>
|
||||||
</Stack>
|
<Stack direction="row" sx={{ alignItems: 'center', mt: '0.5em' }}>
|
||||||
</RadioGroup>
|
<FormControlLabel
|
||||||
)
|
control={
|
||||||
|
<>
|
||||||
|
<Radio checked={courseTableMode === 'all'} onChange={() => setCourseTableMode('all')} size="small" />
|
||||||
|
<StudentAmountLimiter
|
||||||
|
disabled={courseTableMode !== 'all'}
|
||||||
|
onStudentAmountLimitChange={value => onStudentAmountLimitChange(value.toString())}
|
||||||
|
studentAmountLimit={studentAmountLimit}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
label=""
|
||||||
|
value={'all'}
|
||||||
|
/>
|
||||||
|
</Stack>
|
||||||
|
</RadioGroup>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { FilterDegreeCoursesModal } from '@/components/PopulationComponents/Popu
|
|||||||
import { PopulationCourseStats } from '@/components/PopulationCourseStats'
|
import { PopulationCourseStats } from '@/components/PopulationCourseStats'
|
||||||
import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat'
|
import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat'
|
||||||
import { SegmentDimmer } from '@/components/SegmentDimmer'
|
import { SegmentDimmer } from '@/components/SegmentDimmer'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
|
||||||
import { PopulationQuery } from '@/types/populationSearch'
|
import { PopulationQuery } from '@/types/populationSearch'
|
||||||
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
||||||
|
|
||||||
@@ -14,7 +13,6 @@ export const PopulationCourses = ({
|
|||||||
query,
|
query,
|
||||||
filteredCourses,
|
filteredCourses,
|
||||||
onlyIamRights,
|
onlyIamRights,
|
||||||
curriculum,
|
|
||||||
courseTableMode,
|
courseTableMode,
|
||||||
studentAmountLimit,
|
studentAmountLimit,
|
||||||
setShowModules,
|
setShowModules,
|
||||||
@@ -24,7 +22,6 @@ export const PopulationCourses = ({
|
|||||||
query: Pick<PopulationQuery, 'programme' | 'years'>
|
query: Pick<PopulationQuery, 'programme' | 'years'>
|
||||||
filteredCourses: FilteredCourse[]
|
filteredCourses: FilteredCourse[]
|
||||||
onlyIamRights: boolean
|
onlyIamRights: boolean
|
||||||
curriculum: ExtendedCurriculumDetails
|
|
||||||
courseTableMode: 'curriculum' | 'all'
|
courseTableMode: 'curriculum' | 'all'
|
||||||
studentAmountLimit: number
|
studentAmountLimit: number
|
||||||
setShowModules: (input: boolean) => void
|
setShowModules: (input: boolean) => void
|
||||||
@@ -47,7 +44,6 @@ export const PopulationCourses = ({
|
|||||||
{courseTableMode === 'curriculum' ? (
|
{courseTableMode === 'curriculum' ? (
|
||||||
<PopulationCourseStats
|
<PopulationCourseStats
|
||||||
courseTableMode={courseTableMode}
|
courseTableMode={courseTableMode}
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
onlyIamRights={onlyIamRights}
|
onlyIamRights={onlyIamRights}
|
||||||
pending={isLoading}
|
pending={isLoading}
|
||||||
|
|||||||
+7
-10
@@ -6,14 +6,13 @@ import { OodiTableExcelExport } from '@/components/OodiTable/excelExport'
|
|||||||
import { IncludeSubstitutionsToggle } from '@/components/PopulationComponents/Students/IncludeSubstitutionsToggle'
|
import { IncludeSubstitutionsToggle } from '@/components/PopulationComponents/Students/IncludeSubstitutionsToggle'
|
||||||
import { useGetColumnDefinitions } from '@/components/PopulationComponents/Students/Table/CoursesTab/columnDefinitions'
|
import { useGetColumnDefinitions } from '@/components/PopulationComponents/Students/Table/CoursesTab/columnDefinitions'
|
||||||
import { useToggle } from '@/hooks/toggle'
|
import { useToggle } from '@/hooks/toggle'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
import { useCurriculum } from '@/hooks/useCurriculum'
|
||||||
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
||||||
import { CreditTypeCode, Name, ProgrammeCourse } from '@oodikone/shared/types'
|
import { CreditTypeCode, Name, ProgrammeCourse } from '@oodikone/shared/types'
|
||||||
import { FormattedStudent, StudentCourse } from '@oodikone/shared/types/studentData'
|
import { FormattedStudent, StudentCourse } from '@oodikone/shared/types/studentData'
|
||||||
import { FilterDegreeCoursesModal } from '@/components/PopulationComponents/PopulationCourses/FilterDegreeCoursesModal'
|
import { FilterDegreeCoursesModal } from '@/components/PopulationComponents/PopulationCourses/FilterDegreeCoursesModal'
|
||||||
|
|
||||||
type CoursesTabContainerProps = {
|
type CoursesTabContainerProps = {
|
||||||
curriculum: ExtendedCurriculumDetails
|
|
||||||
students: FormattedStudent[]
|
students: FormattedStudent[]
|
||||||
courses: FilteredCourse[]
|
courses: FilteredCourse[]
|
||||||
idToGroupIdMap: Record<string, string>
|
idToGroupIdMap: Record<string, string>
|
||||||
@@ -263,13 +262,8 @@ const gradeOrdering = ['0', 'Hyl.', 'TT', 'HT', '1', '2', '3', '4', '5', 'Hyv.']
|
|||||||
const compareCourseGrades = (previous: StudentCourse, current: StudentCourse) =>
|
const compareCourseGrades = (previous: StudentCourse, current: StudentCourse) =>
|
||||||
gradeOrdering.indexOf(previous.grade) <= gradeOrdering.indexOf(current.grade)
|
gradeOrdering.indexOf(previous.grade) <= gradeOrdering.indexOf(current.grade)
|
||||||
|
|
||||||
export const CoursesTabContainer = ({
|
export const CoursesTabContainer = ({ students, courses, idToGroupIdMap, programme }: CoursesTabContainerProps) => {
|
||||||
curriculum,
|
const { curriculum } = useCurriculum()
|
||||||
students,
|
|
||||||
courses,
|
|
||||||
idToGroupIdMap,
|
|
||||||
programme,
|
|
||||||
}: CoursesTabContainerProps) => {
|
|
||||||
const { visible: namesVisible } = useStudentNameVisibility()
|
const { visible: namesVisible } = useStudentNameVisibility()
|
||||||
const [includeSubstitutions, toggleIncludeSubstitutions] = useToggle(true)
|
const [includeSubstitutions, toggleIncludeSubstitutions] = useToggle(true)
|
||||||
|
|
||||||
@@ -279,7 +273,10 @@ export const CoursesTabContainer = ({
|
|||||||
)
|
)
|
||||||
|
|
||||||
const curriculumCourses = useMemo(
|
const curriculumCourses = useMemo(
|
||||||
() => [...curriculum.defaultProgrammeCourses, ...curriculum.secondProgrammeCourses].filter(nonVisible),
|
() =>
|
||||||
|
curriculum
|
||||||
|
? [...curriculum.defaultProgrammeCourses, ...curriculum.secondProgrammeCourses].filter(nonVisible)
|
||||||
|
: [],
|
||||||
[curriculum]
|
[curriculum]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -1,7 +1,7 @@
|
|||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
|
|
||||||
import { ModulesTab } from '@/components/PopulationComponents/Students/Table/ModulesTab/ModulesTable'
|
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 { FilteredCourse } from '@/util/coursesOfPopulation'
|
||||||
import { createLocaleComparator } from '@/util/comparator'
|
import { createLocaleComparator } from '@/util/comparator'
|
||||||
import { formatISODate } from '@/util/timeAndDate'
|
import { formatISODate } from '@/util/timeAndDate'
|
||||||
@@ -86,18 +86,17 @@ const getDegreeProgrammeCodes = (curriculumModules): string[] => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ModulesTabContainer = ({
|
export const ModulesTabContainer = ({
|
||||||
curriculum,
|
|
||||||
students,
|
students,
|
||||||
courses,
|
courses,
|
||||||
idToGroupIdMap,
|
idToGroupIdMap,
|
||||||
programme,
|
programme,
|
||||||
}: {
|
}: {
|
||||||
curriculum: ExtendedCurriculumDetails | null | undefined
|
|
||||||
students: Student[]
|
students: Student[]
|
||||||
courses: FilteredCourse[]
|
courses: FilteredCourse[]
|
||||||
idToGroupIdMap: Record<string, string>
|
idToGroupIdMap: Record<string, string>
|
||||||
programme: string
|
programme: string
|
||||||
}) => {
|
}) => {
|
||||||
|
const { curriculum } = useCurriculum()
|
||||||
const curriculumModules = useMemo(
|
const curriculumModules = useMemo(
|
||||||
() => (curriculum ? [...curriculum.defaultProgrammeModules, ...curriculum.secondProgrammeModules] : []),
|
() => (curriculum ? [...curriculum.defaultProgrammeModules, ...curriculum.secondProgrammeModules] : []),
|
||||||
[curriculum]
|
[curriculum]
|
||||||
|
|||||||
+2
-3
@@ -17,7 +17,7 @@ import { CopyStudentNumbersHeader } from '@/components/OodiTable/common/CopyStud
|
|||||||
import { OodiTableExcelExport } from '@/components/OodiTable/excelExport'
|
import { OodiTableExcelExport } from '@/components/OodiTable/excelExport'
|
||||||
import { TableInfo } from '@/components/PopulationComponents/Students/Table/ProgressTab/info'
|
import { TableInfo } from '@/components/PopulationComponents/Students/Table/ProgressTab/info'
|
||||||
import { DateFormat } from '@/constants/date'
|
import { DateFormat } from '@/constants/date'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
import { useCurriculum } from '@/hooks/useCurriculum'
|
||||||
import { useSemesters } from '@/hooks/useSemesters'
|
import { useSemesters } from '@/hooks/useSemesters'
|
||||||
import { useGetProgressCriteriaQuery } from '@/redux/progressCriteria'
|
import { useGetProgressCriteriaQuery } from '@/redux/progressCriteria'
|
||||||
import { CheckIcon, CloseIcon, EditIcon, RemoveIcon, SwapHorizIcon } from '@/theme'
|
import { CheckIcon, CloseIcon, EditIcon, RemoveIcon, SwapHorizIcon } from '@/theme'
|
||||||
@@ -226,14 +226,12 @@ type Label = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const ProgressTable = ({
|
export const ProgressTable = ({
|
||||||
curriculum,
|
|
||||||
idToGroupIdMap,
|
idToGroupIdMap,
|
||||||
students,
|
students,
|
||||||
months,
|
months,
|
||||||
programme,
|
programme,
|
||||||
studyGuidanceGroupProgramme,
|
studyGuidanceGroupProgramme,
|
||||||
}: {
|
}: {
|
||||||
curriculum?: ExtendedCurriculumDetails | null
|
|
||||||
idToGroupIdMap: IdToGroupId
|
idToGroupIdMap: IdToGroupId
|
||||||
students: FormattedStudent[]
|
students: FormattedStudent[]
|
||||||
months: number
|
months: number
|
||||||
@@ -242,6 +240,7 @@ export const ProgressTable = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { visible: namesVisible } = useStudentNameVisibility()
|
const { visible: namesVisible } = useStudentNameVisibility()
|
||||||
const { getTextIn } = useLanguage()
|
const { getTextIn } = useLanguage()
|
||||||
|
const { curriculum } = useCurriculum()
|
||||||
const { data: criteria } = useGetProgressCriteriaQuery({ programmeCode: programme }, { skip: !programme })
|
const { data: criteria } = useGetProgressCriteriaQuery({ programmeCode: programme }, { skip: !programme })
|
||||||
const { semesters: allSemesters } = useSemesters()
|
const { semesters: allSemesters } = useSemesters()
|
||||||
const isStudyGuidanceGroupProgramme = studyGuidanceGroupProgramme !== ''
|
const isStudyGuidanceGroupProgramme = studyGuidanceGroupProgramme !== ''
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import { type FormattedStudentData, GeneralTab } from '@/components/PopulationCo
|
|||||||
import { ModulesTabContainer as ModulesTab } from '@/components/PopulationComponents/Students/Table/ModulesTab'
|
import { ModulesTabContainer as ModulesTab } from '@/components/PopulationComponents/Students/Table/ModulesTab'
|
||||||
import { ProgressTable as ProgressTab } from '@/components/PopulationComponents/Students/Table/ProgressTab'
|
import { ProgressTable as ProgressTab } from '@/components/PopulationComponents/Students/Table/ProgressTab'
|
||||||
import { TagsTab } from '@/components/PopulationComponents/Students/Table/TagsTab'
|
import { TagsTab } from '@/components/PopulationComponents/Students/Table/TagsTab'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
|
||||||
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
import { FilteredCourse } from '@/util/coursesOfPopulation'
|
||||||
import { useParseQueryParams } from '@/util/queryparams'
|
import { useParseQueryParams } from '@/util/queryparams'
|
||||||
import { isBachelorOrLicentiateProgramme } from '@/util/studyProgramme'
|
import { isBachelorOrLicentiateProgramme } from '@/util/studyProgramme'
|
||||||
@@ -29,7 +28,6 @@ type PopulationDetails = CommonProps & {
|
|||||||
variant: 'population'
|
variant: 'population'
|
||||||
programme: string
|
programme: string
|
||||||
combinedProgramme?: string
|
combinedProgramme?: string
|
||||||
curriculum: ExtendedCurriculumDetails | null
|
|
||||||
filteredCourses: FilteredCourse[]
|
filteredCourses: FilteredCourse[]
|
||||||
idToGroupIdMap: Record<string, string>
|
idToGroupIdMap: Record<string, string>
|
||||||
}
|
}
|
||||||
@@ -40,7 +38,6 @@ type CoursePopulation = CommonProps & {
|
|||||||
|
|
||||||
type StudyGuidanceGroup = CommonProps & {
|
type StudyGuidanceGroup = CommonProps & {
|
||||||
variant: 'studyGuidanceGroupPopulation'
|
variant: 'studyGuidanceGroupPopulation'
|
||||||
curriculum: ExtendedCurriculumDetails | null
|
|
||||||
studyGuidanceGroup: any
|
studyGuidanceGroup: any
|
||||||
year: string
|
year: string
|
||||||
filteredCourses: FilteredCourse[]
|
filteredCourses: FilteredCourse[]
|
||||||
@@ -63,7 +60,6 @@ export const PopulationStudents = ({
|
|||||||
variant,
|
variant,
|
||||||
programme,
|
programme,
|
||||||
combinedProgramme,
|
combinedProgramme,
|
||||||
curriculum,
|
|
||||||
filteredStudents,
|
filteredStudents,
|
||||||
filteredCourses,
|
filteredCourses,
|
||||||
idToGroupIdMap,
|
idToGroupIdMap,
|
||||||
@@ -101,7 +97,6 @@ export const PopulationStudents = ({
|
|||||||
Courses: (
|
Courses: (
|
||||||
<CoursesTab
|
<CoursesTab
|
||||||
courses={filteredCourses ?? []}
|
courses={filteredCourses ?? []}
|
||||||
curriculum={curriculum} // TODO: add guard for missing curriculum (it should never be missing)
|
|
||||||
idToGroupIdMap={idToGroupIdMap ?? {}}
|
idToGroupIdMap={idToGroupIdMap ?? {}}
|
||||||
students={filteredStudents}
|
students={filteredStudents}
|
||||||
programme={programme}
|
programme={programme}
|
||||||
@@ -110,7 +105,6 @@ export const PopulationStudents = ({
|
|||||||
Modules: (
|
Modules: (
|
||||||
<ModulesTab
|
<ModulesTab
|
||||||
courses={filteredCourses ?? []}
|
courses={filteredCourses ?? []}
|
||||||
curriculum={curriculum}
|
|
||||||
idToGroupIdMap={idToGroupIdMap ?? {}}
|
idToGroupIdMap={idToGroupIdMap ?? {}}
|
||||||
students={filteredStudents}
|
students={filteredStudents}
|
||||||
programme={programme}
|
programme={programme}
|
||||||
@@ -119,7 +113,6 @@ export const PopulationStudents = ({
|
|||||||
Tags: <TagsTab combinedProgramme={combinedProgramme} programme={programme} students={filteredStudents} />,
|
Tags: <TagsTab combinedProgramme={combinedProgramme} programme={programme} students={filteredStudents} />,
|
||||||
Progress: (
|
Progress: (
|
||||||
<ProgressTab
|
<ProgressTab
|
||||||
curriculum={curriculum}
|
|
||||||
idToGroupIdMap={idToGroupIdMap ?? {}}
|
idToGroupIdMap={idToGroupIdMap ?? {}}
|
||||||
months={months ?? Infinity}
|
months={months ?? Infinity}
|
||||||
programme={programme}
|
programme={programme}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { useState, useEffect } from 'react'
|
|||||||
import { GradeDistribution } from '@/components/PopulationCourseStats/GradeDistribution'
|
import { GradeDistribution } from '@/components/PopulationCourseStats/GradeDistribution'
|
||||||
import { PassFailEnrollments } from '@/components/PopulationCourseStats/PassFailEnrollments'
|
import { PassFailEnrollments } from '@/components/PopulationCourseStats/PassFailEnrollments'
|
||||||
import { PassingSemesters } from '@/components/PopulationCourseStats/PassingSemesters'
|
import { PassingSemesters } from '@/components/PopulationCourseStats/PassingSemesters'
|
||||||
import { ExtendedCurriculumDetails } from '@/hooks/useCurriculums'
|
import { useCurriculum } from '@/hooks/useCurriculum'
|
||||||
import { FilteredCourse, CourseModule, FilteredProgrammeCourse } from '@/util/coursesOfPopulation'
|
import { FilteredCourse, CourseModule, FilteredProgrammeCourse } from '@/util/coursesOfPopulation'
|
||||||
import type { CourseStats } from '@oodikone/shared/routes/populations'
|
import type { CourseStats } from '@oodikone/shared/routes/populations'
|
||||||
import type { Module, CurriculumDetails } from '@oodikone/shared/types'
|
import type { Module, CurriculumDetails } from '@oodikone/shared/types'
|
||||||
@@ -14,7 +14,6 @@ type PopulationCourseStatsProps = {
|
|||||||
filteredCourses: FilteredCourse[]
|
filteredCourses: FilteredCourse[]
|
||||||
pending: boolean
|
pending: boolean
|
||||||
onlyIamRights: boolean
|
onlyIamRights: boolean
|
||||||
curriculum: ExtendedCurriculumDetails
|
|
||||||
courseTableMode: 'all' | 'curriculum'
|
courseTableMode: 'all' | 'curriculum'
|
||||||
showModules: boolean
|
showModules: boolean
|
||||||
setShowModules: (input: boolean) => void
|
setShowModules: (input: boolean) => void
|
||||||
@@ -33,15 +32,17 @@ export const PopulationCourseStats = ({
|
|||||||
filteredCourses,
|
filteredCourses,
|
||||||
pending,
|
pending,
|
||||||
onlyIamRights,
|
onlyIamRights,
|
||||||
curriculum,
|
|
||||||
courseTableMode,
|
courseTableMode,
|
||||||
showModules,
|
showModules,
|
||||||
setShowModules,
|
setShowModules,
|
||||||
}: PopulationCourseStatsProps) => {
|
}: PopulationCourseStatsProps) => {
|
||||||
|
const { curriculum } = useCurriculum()
|
||||||
const [modules, setModules] = useState<CourseModule[]>([])
|
const [modules, setModules] = useState<CourseModule[]>([])
|
||||||
const [tab, setTab] = useState(0)
|
const [tab, setTab] = useState(0)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!curriculum) return
|
||||||
|
|
||||||
// Change courses type from FilteredCourse[] to FilteredProgrammeCourse[] + add module-field to object so we can deconstruct it below
|
// Change courses type from FilteredCourse[] to FilteredProgrammeCourse[] + add module-field to object so we can deconstruct it below
|
||||||
const modules: Record<
|
const modules: Record<
|
||||||
string,
|
string,
|
||||||
|
|||||||
@@ -128,14 +128,12 @@ const PopulationDetailsContent = ({
|
|||||||
<>
|
<>
|
||||||
<CourseTableModeSelector
|
<CourseTableModeSelector
|
||||||
courseTableMode={courseTableMode}
|
courseTableMode={courseTableMode}
|
||||||
curriculum={curriculum}
|
|
||||||
onStudentAmountLimitChange={onStudentAmountLimitChange}
|
onStudentAmountLimitChange={onStudentAmountLimitChange}
|
||||||
setCourseTableMode={setCourseTableMode}
|
setCourseTableMode={setCourseTableMode}
|
||||||
studentAmountLimit={studentAmountLimit}
|
studentAmountLimit={studentAmountLimit}
|
||||||
/>
|
/>
|
||||||
<PopulationCourses
|
<PopulationCourses
|
||||||
courseTableMode={courseTableMode}
|
courseTableMode={courseTableMode}
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
onlyIamRights={onlyIamRights}
|
onlyIamRights={onlyIamRights}
|
||||||
@@ -153,7 +151,6 @@ const PopulationDetailsContent = ({
|
|||||||
content: (
|
content: (
|
||||||
<PopulationStudents
|
<PopulationStudents
|
||||||
combinedProgramme={combinedProgramme}
|
combinedProgramme={combinedProgramme}
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
filteredStudents={filteredStudents}
|
filteredStudents={filteredStudents}
|
||||||
idToGroupIdMap={idToGroupIdMap}
|
idToGroupIdMap={idToGroupIdMap}
|
||||||
|
|||||||
-2
@@ -124,7 +124,6 @@ const SingleStudyGuidanceGroupPanelsContent = ({
|
|||||||
title: 'Courses of population',
|
title: 'Courses of population',
|
||||||
content: (
|
content: (
|
||||||
<StudyGuidanceGroupPopulationCourses
|
<StudyGuidanceGroupPopulationCourses
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
studyProgramme={group.tags?.studyProgramme ? programme : null}
|
studyProgramme={group.tags?.studyProgramme ? programme : null}
|
||||||
year={groupYear}
|
year={groupYear}
|
||||||
@@ -136,7 +135,6 @@ const SingleStudyGuidanceGroupPanelsContent = ({
|
|||||||
content: (
|
content: (
|
||||||
// @ts-expect-error FIX typing
|
// @ts-expect-error FIX typing
|
||||||
<PopulationStudents
|
<PopulationStudents
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
filteredStudents={filteredStudents}
|
filteredStudents={filteredStudents}
|
||||||
generalTabColumnFunction={() => columnsGeneralTab({ group })}
|
generalTabColumnFunction={() => columnsGeneralTab({ group })}
|
||||||
|
|||||||
+1
-3
@@ -6,7 +6,7 @@ import { PopulationCourseStats } from '@/components/PopulationCourseStats'
|
|||||||
import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat'
|
import { PopulationCourseStatsFlat } from '@/components/PopulationCourseStats/PopulationCourseStatsFlat'
|
||||||
import { useDebouncedState } from '@/hooks/debouncedState'
|
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 [studentAmountLimit, setStudentAmountLimit] = useDebouncedState(0, 1000)
|
||||||
const curriculumsAvailable = studyProgramme && year
|
const curriculumsAvailable = studyProgramme && year
|
||||||
const [courseTableMode, setCourseTableMode] = useState<'all' | 'curriculum'>(
|
const [courseTableMode, setCourseTableMode] = useState<'all' | 'curriculum'>(
|
||||||
@@ -23,7 +23,6 @@ export const StudyGuidanceGroupPopulationCourses = ({ filteredCourses, studyProg
|
|||||||
{curriculumsAvailable ? (
|
{curriculumsAvailable ? (
|
||||||
<CourseTableModeSelector
|
<CourseTableModeSelector
|
||||||
courseTableMode={courseTableMode}
|
courseTableMode={courseTableMode}
|
||||||
curriculum={curriculum}
|
|
||||||
onStudentAmountLimitChange={onStudentAmountLimitChange}
|
onStudentAmountLimitChange={onStudentAmountLimitChange}
|
||||||
setCourseTableMode={setCourseTableMode}
|
setCourseTableMode={setCourseTableMode}
|
||||||
studentAmountLimit={studentAmountLimit}
|
studentAmountLimit={studentAmountLimit}
|
||||||
@@ -37,7 +36,6 @@ export const StudyGuidanceGroupPopulationCourses = ({ filteredCourses, studyProg
|
|||||||
{courseTableMode === 'curriculum' ? (
|
{courseTableMode === 'curriculum' ? (
|
||||||
<PopulationCourseStats
|
<PopulationCourseStats
|
||||||
courseTableMode={courseTableMode}
|
courseTableMode={courseTableMode}
|
||||||
curriculum={curriculum}
|
|
||||||
filteredCourses={filteredCourses}
|
filteredCourses={filteredCourses}
|
||||||
onlyIamRights={onlyIamRights}
|
onlyIamRights={onlyIamRights}
|
||||||
pending={false}
|
pending={false}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export const CurriculumProvider = ({
|
|||||||
return <CurriculumContext.Provider value={value}>{children}</CurriculumContext.Provider>
|
return <CurriculumContext.Provider value={value}>{children}</CurriculumContext.Provider>
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Context variant of the curriculum hook */
|
/** Context-aware variant of the curriculum hook. Use this in population statistics views. */
|
||||||
export const useCurriculum = () => {
|
export const useCurriculum = () => {
|
||||||
const context = useContext(CurriculumContext)
|
const context = useContext(CurriculumContext)
|
||||||
if (!context) {
|
if (!context) {
|
||||||
|
|||||||
Reference in New Issue
Block a user