@@ -8,9 +8,10 @@ import {
88 getAbilityBackground ,
99 getAbilityGlow
1010} from '../../features/achievement/AchievementConstants' ;
11- import { AchievementStatus } from '../../features/achievement/AchievementTypes' ;
12- import { FETCH_ASSESSMENT } from '../application/types/SessionTypes' ;
13- import { Assessment , FETCH_ASSESSMENT_OVERVIEWS } from '../assessment/AssessmentTypes' ;
11+ import { AchievementStatus , AchievementUser } from '../../features/achievement/AchievementTypes' ;
12+ import { FETCH_ASSESSMENT , FETCH_ASSESSMENT_ADMIN } from '../application/types/SessionTypes' ;
13+ import { FETCH_ASSESSMENT_OVERVIEWS } from '../assessment/AssessmentTypes' ;
14+ import { Assessment } from '../assessment/AssessmentTypes' ;
1415import { useTypedSelector } from '../utils/Hooks' ;
1516import AchievementCommentCard from './AchievementCommentCard' ;
1617import { prettifyDate } from './utils/DateHelper' ;
@@ -19,25 +20,41 @@ import AchievementViewGoal from './view/AchievementViewGoal';
1920
2021type AchievementViewProps = {
2122 focusUuid : string ;
22- courseRegId ?: number ;
23+ assessments ?: Map < number , Assessment > ;
24+ userState ?: [ AchievementUser | undefined , any ] ;
2325} ;
2426
25- function AchievementView ( { focusUuid, courseRegId } : AchievementViewProps ) {
27+ function AchievementView ( { focusUuid, userState } : AchievementViewProps ) {
28+ const assessmentId = ! Number . isNaN ( + focusUuid ) && + focusUuid !== 0 ? + focusUuid : undefined ;
29+ let courseRegId : number | undefined ;
30+
31+ if ( userState ) {
32+ const [ selectedUser ] = userState ! ;
33+ courseRegId = selectedUser ?. courseRegId ;
34+ }
35+ const userCrid = useTypedSelector ( store => store . session . courseRegId ) ;
36+ const isAdminView : boolean = courseRegId !== undefined && courseRegId !== userCrid ;
37+
2638 const dispatch = useDispatch ( ) ;
2739 useEffect ( ( ) => {
28- if ( ! Number . isNaN ( + focusUuid ) && + focusUuid !== 0 ) {
29- dispatch ( { type : FETCH_ASSESSMENT , payload : + focusUuid } ) ;
30- dispatch ( { type : FETCH_ASSESSMENT_OVERVIEWS } ) ;
40+ dispatch ( { type : FETCH_ASSESSMENT_OVERVIEWS } ) ;
41+ if ( ! assessmentId ) {
42+ return ;
3143 }
32- } , [ focusUuid , courseRegId , dispatch ] ) ;
44+ if ( isAdminView ) {
45+ // Fetch selected user's assessment from admin route
46+ dispatch ( { type : FETCH_ASSESSMENT_ADMIN , payload : { assessmentId, courseRegId } } ) ;
47+ } else {
48+ // If user is student, fetch assessment details from assessment route instead, as seen below
49+ dispatch ( { type : FETCH_ASSESSMENT , payload : assessmentId } ) ;
50+ }
51+ } , [ dispatch , assessmentId , courseRegId , isAdminView ] ) ;
3352
3453 const inferencer = useContext ( AchievementContext ) ;
35- const courseId = useTypedSelector ( store => store . session . courseId ) ;
36-
3754 const assessments = useTypedSelector ( store => store . session . assessments ) ;
55+ const selectedAssessment : Assessment | undefined = assessments . get ( assessmentId ! ) ;
3856 const allAssessmentConfigs = useTypedSelector ( store => store . session . assessmentOverviews ) ?? [ ] ;
39- const selectedAssessment : Assessment | undefined = assessments . get ( + focusUuid ) ;
40- const selectedAssessmentConfig = allAssessmentConfigs . find ( config => config . id === + focusUuid ) ;
57+ const selectedAssessmentConfig = allAssessmentConfigs . find ( config => config . id === assessmentId ) ;
4158
4259 if ( focusUuid === '' ) {
4360 return (
@@ -47,7 +64,6 @@ function AchievementView({ focusUuid, courseRegId }: AchievementViewProps) {
4764 </ div >
4865 ) ;
4966 }
50-
5167 const achievement = inferencer . getAchievement ( focusUuid ) ;
5268 const { deadline, title, view } = achievement ;
5369 const { coverImage, completionText, description } = view ;
@@ -82,7 +98,9 @@ function AchievementView({ focusUuid, courseRegId }: AchievementViewProps) {
8298 selectedAssessment &&
8399 selectedAssessmentConfig &&
84100 selectedAssessmentConfig . isManuallyGraded && (
85- < AchievementCommentCard courseId = { courseId } assessment = { selectedAssessment } />
101+ // TODO: showToQuestion is currently used to disable the goto question button for admins,
102+ // as it has not been integrated with the grading view yet
103+ < AchievementCommentCard assessment = { selectedAssessment } showToQuestion = { ! isAdminView } />
86104 ) }
87105
88106 { goals . length > 0 && (
0 commit comments