@@ -39,6 +39,7 @@ import { normalizeReviewMetadata } from '../utils/metadataMatching'
3939import { resolvePhaseMeta } from '../utils/phaseResolution'
4040import { buildReviewForResource } from '../utils/reviewBuilding'
4141import { resolveReviewPhaseId , reviewMatchesPhase } from '../utils/reviewMatching'
42+ import { shouldIncludeInReviewPhase } from '../utils/reviewPhaseGuards'
4243import {
4344 buildResourceFromReviewHandle ,
4445 determinePassFail ,
@@ -75,6 +76,18 @@ const isCheckpointSubmission = (submission: BackendSubmission): boolean => (
7576 normalizeSubmissionType ( submission ?. type ) === SUBMISSION_TYPE_CHECKPOINT
7677)
7778
79+ const resolveCheckpointSubmissionScore = (
80+ review : BackendReview ,
81+ submission : BackendSubmission ,
82+ ) : number | undefined => {
83+ const reviewStatus = ( review . status || '' ) . toUpperCase ( )
84+ if ( reviewStatus !== 'COMPLETED' && reviewStatus !== 'SUBMITTED' ) {
85+ return undefined
86+ }
87+
88+ return parseSubmissionScore ( submission . screeningScore )
89+ }
90+
7891export interface useFetchScreeningReviewProps {
7992 mappingReviewAppeal : MappingReviewAppeal // from review id to appeal info
8093 // screening data
@@ -491,6 +504,24 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
491504 const reviewScorecardId = reviewPhaseMeta . scorecardId
492505 const reviewPhaseIds = reviewPhaseMeta . phaseIds
493506
507+ const iterativeReviewPhaseMeta = useMemo (
508+ ( ) => resolvePhaseMeta (
509+ 'Iterative Review' ,
510+ challengeInfo ?. phases ,
511+ challengeInfo ?. reviewers ,
512+ challengeReviews ,
513+ challengeLegacy ?. reviewScorecardId ,
514+ ) ,
515+ [
516+ challengeInfo ?. phases ,
517+ challengeInfo ?. reviewers ,
518+ challengeReviews ,
519+ challengeLegacy ?. reviewScorecardId ,
520+ ] ,
521+ )
522+ const iterativeReviewScorecardId = iterativeReviewPhaseMeta . scorecardId
523+ const iterativeReviewPhaseIds = iterativeReviewPhaseMeta . phaseIds
524+
494525 const approvalPhaseMeta = useMemo (
495526 ( ) => resolvePhaseMeta (
496527 'Approval' ,
@@ -1063,7 +1094,17 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
10631094 . find ( r => ( r . roleName || '' ) . toLowerCase ( ) === 'checkpoint reviewer' ) ?. id
10641095
10651096 const checkpointReviewRows = checkpointSubmissions . reduce < Screening [ ] > ( ( rows , item ) => {
1066- const matchedReview = checkpointReviewsBySubmission . get ( item . id )
1097+ let matchedReview = checkpointReviewsBySubmission . get ( item . id )
1098+ if ( ! matchedReview && item . reviewResourceMapping ) {
1099+ matchedReview = Object . values ( item . reviewResourceMapping )
1100+ . find ( review => reviewMatchesPhase (
1101+ review ,
1102+ checkpointReviewScorecardId ,
1103+ checkpointReviewPhaseIds ,
1104+ 'Checkpoint Review' ,
1105+ ) )
1106+ }
1107+
10671108 if ( ! matchedReview ) {
10681109 return rows
10691110 }
@@ -1072,12 +1113,9 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
10721113 let numericScore = getNumericScore ( matchedReview )
10731114
10741115 if ( numericScore === undefined ) {
1075- const reviewStatus = ( matchedReview . status || '' ) . toUpperCase ( )
1076- if ( reviewStatus === 'COMPLETED' || reviewStatus === 'SUBMITTED' ) {
1077- const submissionScore = parseSubmissionScore ( item . screeningScore )
1078- if ( submissionScore !== undefined ) {
1079- numericScore = submissionScore
1080- }
1116+ const submissionScore = resolveCheckpointSubmissionScore ( matchedReview , item )
1117+ if ( submissionScore !== undefined ) {
1118+ numericScore = submissionScore
10811119 }
10821120 }
10831121
@@ -1486,30 +1524,37 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
14861524 combinedReviewerIds . push ( normalized )
14871525 }
14881526
1489- reviewerIds . forEach ( appendReviewerId )
1490- forEach ( challengeSubmission . review , reviewEntry => {
1491- const matchesReviewPhase = reviewMatchesPhase (
1492- reviewEntry ,
1527+ const matchesReviewPhase = ( candidate : BackendReview | undefined ) : boolean => (
1528+ reviewMatchesPhase (
1529+ candidate ,
14931530 reviewScorecardId ,
14941531 reviewPhaseIds ,
14951532 'Review' ,
14961533 )
1497- if ( matchesReviewPhase ) {
1534+ || reviewMatchesPhase (
1535+ candidate ,
1536+ iterativeReviewScorecardId ,
1537+ iterativeReviewPhaseIds ,
1538+ 'Iterative Review' ,
1539+ )
1540+ )
1541+
1542+ reviewerIds . forEach ( appendReviewerId )
1543+ forEach ( challengeSubmission . review , reviewEntry => {
1544+ if ( matchesReviewPhase ( reviewEntry ) ) {
14981545 appendReviewerId ( reviewEntry ?. resourceId )
14991546 }
15001547 } )
15011548
15021549 forEach ( combinedReviewerIds , reviewerId => {
15031550 const matchingReview = challengeSubmission . review ?. find (
1504- r => r . resourceId === reviewerId && reviewMatchesPhase (
1505- r ,
1506- reviewScorecardId ,
1507- reviewPhaseIds ,
1508- 'Review' ,
1509- ) ,
1551+ r => r . resourceId === reviewerId && matchesReviewPhase ( r ) ,
15101552 )
1511- const assignmentReview
1553+ const assignmentReviewCandidate
15121554 = reviewAssignmentsBySubmission [ challengeSubmission . id ] ?. [ reviewerId ]
1555+ const assignmentReview = matchesReviewPhase ( assignmentReviewCandidate )
1556+ ? assignmentReviewCandidate
1557+ : undefined
15131558
15141559 const normalizedReviewForResource = buildReviewForResource ( {
15151560 assignmentReview,
@@ -1540,6 +1585,8 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
15401585 } , [
15411586 challengeReviewById ,
15421587 contestSubmissions ,
1588+ iterativeReviewPhaseIds ,
1589+ iterativeReviewScorecardId ,
15431590 resourceMemberIdMapping ,
15441591 reviewerIds ,
15451592 reviewAssignmentsBySubmission ,
@@ -1688,11 +1735,19 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
16881735 return 0
16891736 }
16901737
1691- const isDesignChallenge = challengeInfo ?. track . name === DESIGN
1738+ const eligibleReviews = review . filter ( submission => shouldIncludeInReviewPhase (
1739+ submission ,
1740+ challengeInfo ?. phases ,
1741+ ) )
1742+ if ( ! eligibleReviews . length ) {
1743+ return 0
1744+ }
1745+
1746+ const isDesignChallenge = challengeInfo ?. track ?. name === DESIGN
16921747
16931748 const filteredReviews = isDesignChallenge
1694- ? review
1695- : review . filter ( item => item . isLatest )
1749+ ? eligibleReviews
1750+ : eligibleReviews . filter ( item => item . isLatest )
16961751
16971752 if ( ! filteredReviews . length ) {
16981753 return 0
@@ -1724,7 +1779,7 @@ export function useFetchScreeningReview(): useFetchScreeningReviewProps {
17241779 return Math . round (
17251780 ( completedReviews . length * 100 ) / filteredReviews . length ,
17261781 )
1727- } , [ review , challengeInfo ] )
1782+ } , [ review , challengeInfo ?. phases , challengeInfo ?. track ?. name ] )
17281783
17291784 useEffect ( ( ) => ( ) => {
17301785 cancelLoadResourceAppeal ( )
0 commit comments