Skip to content

Commit f869424

Browse files
authored
Assessment: Show progress diagrams in Assessment Overview (#583)
* update server to 5 scoreLevels * Update client to 5 score levels * fix: tests * fix: update score level display and competency description handling * fix: refactor score level handling and update SQL comments for consistency * fix: update score level reference in student score test * fix: enhance score level mapping and add integration tests * feat: Add assessment diagrams and score distribution charts - Implemented AssessmentDiagram and AssessmentScoreLevelDiagram components for visualizing assessment data. - Created ScoreDistributionBarChart and related components for displaying score distributions. - Added utility functions for generating score distribution data points and configuring chart settings. - Introduced new interfaces for data handling and improved grid layout for responsive design. - Updated AssessmentOverviewPage and AssessmentStatisticsPage to include new diagrams. * fix: remove unnecessary grid columns for assessment overview layout * fix: update score level type to use ScoreLevel enum in counts * fix: update score level handling in assessment requests and add mapping functions * fix: rename score field to scoreNumeric for consistency across student score types * fix: update score level mapping to use constants and improve error handling * fix: refactor import paths for useGetParticipantionsWithAssessment and update interface imports * fix: update score level mapping in DTO integration test for accuracy * feat: add action item management and enhance assessment schema with new fields * feat: implement action item management with CRUD operations and database integration * feat: add GradeSuggestionBadge component for displaying grade suggestions * fix: update default value for grade_suggestion in assessment_completion table * feat: add ActionItem interface and enhance Assessment types with new fields * feat: implement CRUD operations for action items and enhance assessment feedback components * feat: refactor assessment feedback to use AssessmentCompletion component and implement action item management * feat: refactor ActionItemPanel to use ActionItemRow and DeleteActionItemDialog components; enhance SQL queries for action items * feat: update AssessmentCompletion layout and improve ActionItemRow delete button visibility * fix: update assessment completion functionality to new db model * feat: update gradeSuggestion type to float64 and adjust related logic in assessment completion components * feat: update handleSaveFormData to accept parameters for remarks and grade; adjust related logic in AssessmentCompletion component * fix: assessment server tests * feat: update assessment types to use string for examples; enhance assessment completion validation logic * fix: improve error handling in MapFloat64ToNumeric function * Top Align Form Fields * Core: Update grid layout in AssessmentForm for better responsiveness and add flex variants in Tailwind config * Core: Add assessment template and course phase associations to category model and queries * Core: Add assessment template ID to category model and update related queries and tests * feat: Implement assessment template management - Added AssessmentTemplate struct and related DTOs for creating, updating, and retrieving assessment templates. - Implemented CRUD operations for assessment templates in the service layer. - Created routes for assessment template management in the router. - Added database queries for assessment templates and their relationships with course phases. - Updated category DTOs and service to include assessment template associations. - Enhanced tests for assessment template service and category service to cover new functionality. - Modified database schema to allow multiple assessment templates and updated foreign key constraints. * feat: Refactor category creation and update to include course phase ID * feat: Add assessment template management with CRUD operations and UI integration * fix: linting * fix: update CountRemainingAssessmentsForStudent query with category_course_phase joins * fix: add tests for assessment template router and fix assessment completion tests * fix: rabbit comment * refactor: extract assessmentTemplateSelection into submodules * feat: implement action item counting for assessment completion * fix: Remove duplicate import of ScoreLevel in BarChartWithScoreLevel component
1 parent 9689ee3 commit f869424

21 files changed

+34
-26
lines changed

clients/assessment_component/src/assessment/pages/AssessmentOverviewPage/AssessmentOverviewPage.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import { useParticipationStore } from '../../zustand/useParticipationStore'
1111
import { StudentScoreBadge } from '../components/StudentScoreBadge'
1212
import { useMemo } from 'react'
1313

14+
import { AssessmentDiagram } from '../components/diagrams/AssessmentDiagram'
15+
import { AssessmentScoreLevelDiagram } from '../components/diagrams/AssessmentScoreLevelDiagram'
16+
1417
export const AssessmentOverviewPage = (): JSX.Element => {
1518
const navigate = useNavigate()
1619
const path = useLocation().pathname
@@ -51,6 +54,10 @@ export const AssessmentOverviewPage = (): JSX.Element => {
5154
<p className='text-sm text-muted-foreground mb-4'>
5255
Click on a participant to view/edit their assessment.
5356
</p>
57+
<div className='grid gap-6 grid-cols-1 lg:grid-cols-2 mb-6'>
58+
<AssessmentDiagram participations={participations} scoreLevels={scoreLevels} />
59+
<AssessmentScoreLevelDiagram participations={participations} scoreLevels={scoreLevels} />
60+
</div>
5461
<div style={{ width: `${tableWidth}px` }}>
5562
<CoursePhaseParticipationsTablePage
5663
participants={participations ?? []}

clients/assessment_component/src/assessment/pages/AssessmentStatisticsPage/AssessmentStatisticsPage.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import { useScoreLevelStore } from '../../zustand/useScoreLevelStore'
1313
import { getAllAssessmentsInPhase } from '../../network/queries/getAllAssessmentsInPhase'
1414
import { getAllAssessmentCompletionsInPhase } from '../../network/queries/getAllAssessmentCompletionsInPhase'
1515

16-
import { useGetParticipantionsWithAssessment } from './hooks/useGetParticipantWithAssessment'
17-
18-
import { AssessmentDiagram } from './diagrams/AssessmentDiagram'
19-
import { AssessmentScoreLevelDiagram } from './diagrams/AssessmentScoreLevelDiagram'
20-
import { GenderDiagram } from './diagrams/GenderDiagram'
21-
import { AuthorDiagram } from './diagrams/AuthorDiagram'
22-
import { CategoryDiagram } from './diagrams/CategoryDiagram'
23-
import { NationalityDiagram } from './diagrams/NationalityDiagram'
16+
import { useGetParticipantionsWithAssessment } from '../components/diagrams/hooks/useGetParticipantWithAssessment'
17+
18+
import { AssessmentDiagram } from '../components/diagrams/AssessmentDiagram'
19+
import { AssessmentScoreLevelDiagram } from '../components/diagrams/AssessmentScoreLevelDiagram'
20+
import { GenderDiagram } from '../components/diagrams/GenderDiagram'
21+
import { AuthorDiagram } from '../components/diagrams/AuthorDiagram'
22+
import { CategoryDiagram } from '../components/diagrams/CategoryDiagram'
23+
import { NationalityDiagram } from '../components/diagrams/NationalityDiagram'
2424

2525
export const AssessmentStatisticsPage = (): JSX.Element => {
2626
const { phaseId } = useParams<{ phaseId: string }>()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { ScoreDistributionBarChart } from './scoreDistributionBarChart/ScoreDist
1212
import { createScoreDistributionDataPoint } from './scoreDistributionBarChart/utils/createScoreDistributionDataPoint'
1313

1414
import { getGridSpanClass } from './utils/getGridSpanClass'
15-
import { ParticipationWithAssessment } from '../interfaces/ParticipationWithAssessment'
15+
import { ParticipationWithAssessment } from './interfaces/ParticipationWithAssessment'
1616

1717
interface AuthorDiagramProps {
1818
participationsWithAssessment: ParticipationWithAssessment[]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { BarChart, Bar, LabelList, XAxis, YAxis, Rectangle } from 'recharts'
33
import { useMemo } from 'react'
44
import { chartConfig } from './utils/chartConfig'
55
import { getCornerRadius } from './utils/getCornerRadius'
6-
import { DataPoint } from '../interfaces/DataPoint'
6+
import { DataPoint } from './interfaces/DataPoint'
77

88
import { ScoreLevel } from '../../../interfaces/scoreLevel'
99

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
CardTitle,
88
} from '@tumaet/prompt-ui-components'
99

10-
import { ParticipationWithAssessment } from '../interfaces/ParticipationWithAssessment'
10+
import { ParticipationWithAssessment } from './interfaces/ParticipationWithAssessment'
1111

1212
import { ScoreDistributionBarChart } from './scoreDistributionBarChart/ScoreDistributionBarChart'
1313
import { createScoreDistributionDataPoint } from './scoreDistributionBarChart/utils/createScoreDistributionDataPoint'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { getCountryName } from '@/lib/getCountries'
99

1010
import { ScoreDistributionBarChart } from './scoreDistributionBarChart/ScoreDistributionBarChart'
1111

12-
import { ParticipationWithAssessment } from '../interfaces/ParticipationWithAssessment'
12+
import { ParticipationWithAssessment } from './interfaces/ParticipationWithAssessment'
1313
import { ScoreLevel } from '../../../interfaces/scoreLevel'
1414

1515
import { createScoreDistributionDataPoint } from './scoreDistributionBarChart/utils/createScoreDistributionDataPoint'
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { useMemo } from 'react'
22

33
import { CoursePhaseParticipationWithStudent } from '@tumaet/prompt-shared-state'
4-
import { ScoreLevelWithParticipation } from '../../../interfaces/scoreLevelWithParticipation'
4+
import { ScoreLevelWithParticipation } from '../../../../interfaces/scoreLevelWithParticipation'
55
import { ParticipationWithAssessment } from '../interfaces/ParticipationWithAssessment'
6-
import { AssessmentCompletion } from '../../../interfaces/assessment'
7-
import { Assessment } from '../../../interfaces/assessment'
6+
import { AssessmentCompletion } from '../../../../interfaces/assessment'
7+
import { Assessment } from '../../../../interfaces/assessment'
88

99
export const useGetParticipantionsWithAssessment = (
1010
participants: CoursePhaseParticipationWithStudent[],
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { CoursePhaseParticipationWithStudent } from '@tumaet/prompt-shared-state'
2-
import { ScoreLevel } from '../../../interfaces/scoreLevel'
3-
import { AssessmentCompletion } from '../../../interfaces/assessment'
4-
import { Assessment } from '../../../interfaces/assessment'
2+
import { ScoreLevel } from '../../../../interfaces/scoreLevel'
3+
import { AssessmentCompletion } from '../../../../interfaces/assessment'
4+
import { Assessment } from '../../../../interfaces/assessment'
55

66
export interface ParticipationWithAssessment {
77
participation: CoursePhaseParticipationWithStudent
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function ScoreDistributionTooltipContent(props: any) {
77
}
88

99
const data = props.payload[0].payload
10-
const counts: Record<string, number> = data.counts
10+
const counts: Record<ScoreLevel, number> = data.counts
1111
const total = Object.values(counts).reduce((sum, count) => sum + count, 0)
1212

1313
if (total === 0) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ export interface ScoreDistributionDataPoint {
77
lowerQuartile: number
88
median: ScoreLevel
99
upperQuartile: number
10-
counts: Record<string, number>
10+
counts: Record<ScoreLevel, number>
1111
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@ export const createScoreDistributionDataPoint = (
2323
median: ScoreLevel.VeryBad,
2424
upperQuartile: 0,
2525
counts: {
26-
novice: 0,
27-
intermediate: 0,
28-
advanced: 0,
29-
expert: 0,
26+
veryBad: 0,
27+
bad: 0,
28+
ok: 0,
29+
good: 0,
30+
veryGood: 0,
3031
},
3132
}
3233
}
@@ -76,7 +77,7 @@ export const createScoreDistributionDataPoint = (
7677
}
7778
return counts
7879
},
79-
{ veryBad: 0, bad: 0, ok: 0, good: 0, veryGood: 0 } as Record<string, number>,
80+
{ veryBad: 0, bad: 0, ok: 0, good: 0, veryGood: 0 } as Record<ScoreLevel, number>,
8081
),
8182
}
8283
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DataPoint } from '../../interfaces/DataPoint'
1+
import { DataPoint } from '../interfaces/DataPoint'
22

33
type CornerRadius = [number, number, number, number]
44

0 commit comments

Comments
 (0)