Skip to content

Commit a67129b

Browse files
authored
Merge pull request #1276 from topcoder-platform/feat/v6
Feat/v6
2 parents f904736 + bed5fdd commit a67129b

File tree

6 files changed

+391
-204
lines changed

6 files changed

+391
-204
lines changed

src/apps/review/src/lib/components/common/TableColumnRenderers.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,11 @@ export function renderReviewScoreCell(
242242
.trim()
243243
.toUpperCase()
244244
: ''
245+
const hasValidScore = typeof review.finalScore === 'number'
246+
&& Number.isFinite(review.finalScore)
247+
245248
if (!normalizedStatus) {
246-
return true
249+
return !hasValidScore
247250
}
248251

249252
return normalizedStatus !== 'COMPLETED'
@@ -540,9 +543,9 @@ export function renderScoreCell(
540543
}
541544

542545
const reviewInfo = reviewDetail.reviewInfo
543-
const reviewId = reviewInfo?.id || reviewDetail.reviewId
546+
const reviewId = reviewInfo?.id ?? reviewDetail.reviewId
544547

545-
if (!reviewInfo || !reviewId) {
548+
if (!reviewId) {
546549
return (
547550
<span className={styles.notReviewed}>
548551
--

src/apps/review/src/lib/hooks/useFetchChallengeRelativeDatas.ts

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,52 @@ import {
1212
fetchAllResourceRoles,
1313
fetchChallengeResouces,
1414
} from '../services/resources.service'
15-
import { BackendResourceRole, BackendSubmission, ChallengeRealtiveInfosMapping } from '../models'
1615
import { fetchSubmissions } from '../services'
16+
import { BackendResourceRole, BackendSubmission, ChallengeRealtiveInfosMapping } from '../models'
17+
18+
const FALLBACK_RESOURCE_ROLES: BackendResourceRole[] = [
19+
{
20+
fullReadAccess: false,
21+
fullWriteAccess: false,
22+
id: 'fd672cca-556e-4d16-b0a2-718218edd412',
23+
isActive: true,
24+
legacyId: 19,
25+
name: 'Checkpoint Screener',
26+
selfObtainable: false,
27+
},
28+
{
29+
fullReadAccess: true,
30+
fullWriteAccess: false,
31+
id: '3970272b-85b4-48d8-8439-672b4f6031bd',
32+
isActive: true,
33+
legacyId: 20,
34+
name: 'Checkpoint Reviewer',
35+
selfObtainable: false,
36+
},
37+
]
38+
39+
const ensureResourceRoleMapping = (
40+
mapping: { [key: string]: BackendResourceRole } | undefined,
41+
): { [key: string]: BackendResourceRole } => {
42+
const base = { ...(mapping ?? {}) }
43+
44+
FALLBACK_RESOURCE_ROLES.forEach(role => {
45+
const existing = base[role.id]
46+
if (!existing) {
47+
base[role.id] = role
48+
return
49+
}
50+
51+
if (!existing.name) {
52+
base[role.id] = {
53+
...existing,
54+
name: role.name,
55+
}
56+
}
57+
})
58+
59+
return base
60+
}
1761

1862
export interface useFetchChallengeRelativeDatasProps {
1963
challengeRelativeInfosMapping: ChallengeRealtiveInfosMapping // from challenge id to list of my role
@@ -57,20 +101,21 @@ export function useFetchChallengeRelativeDatas(
57101
setResourceRoleReviewer(find(results.data, {
58102
name: 'Reviewer',
59103
}))
60-
setResourceRoleMapping(
61-
reduce(
62-
results.data,
63-
(mappingResult, resourceRole: BackendResourceRole) => ({
64-
...mappingResult,
65-
[resourceRole.id]: resourceRole,
66-
}),
67-
{},
68-
),
69-
)
104+
const mapping = ensureResourceRoleMapping(reduce(
105+
results.data,
106+
(mappingResult, resourceRole: BackendResourceRole) => ({
107+
...mappingResult,
108+
[resourceRole.id]: resourceRole,
109+
}),
110+
{},
111+
))
112+
113+
setResourceRoleMapping(mapping)
70114
setIsLoadingResourceRoles(false)
71115
})
72116
.catch(e => {
73117
handleError(e)
118+
setResourceRoleMapping(current => ensureResourceRoleMapping(current))
74119
setIsLoadingResourceRoles(false)
75120
})
76121
})

src/apps/review/src/lib/models/ReviewResult.model.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { BackendReview } from './BackendReview.model'
1111
* Review result info
1212
*/
1313
export interface ReviewResult {
14+
id?: string
1415
appeals: AppealResult[]
1516
createdAt: string | Date
1617
createdAtString?: string // this field is calculated at frontend
@@ -111,6 +112,7 @@ export function convertBackendReviewToReviewResult(
111112
appeals: [],
112113
createdAt,
113114
createdAtString,
115+
id: data.id,
114116
phaseName,
115117
resourceId: data.resourceId,
116118
reviewDate,

src/apps/review/src/lib/models/SubmissionInfo.model.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export interface SubmissionInfo {
2222
memberId: string
2323
userInfo?: BackendResource // this field is calculated at frontend
2424
review?: ReviewInfo
25+
reviewInfos?: ReviewInfo[]
2526
reviews?: ReviewResult[]
2627
/**
2728
* Backend review type identifier (e.g. 'Post-Mortem Review').
@@ -109,6 +110,9 @@ export function convertBackendSubmissionToSubmissionInfo(
109110
? isPassingReviewRaw
110111
: undefined
111112
const reviewEntries = Array.isArray(data.review) ? data.review : []
113+
const reviewInfos = reviewEntries.map(convertBackendReviewToReviewInfo)
114+
const reviewResults = reviewEntries.map(convertBackendReviewToReviewResult)
115+
const primaryReviewInfo = reviewInfos[0]
112116
const primaryReview = reviewEntries[0]
113117

114118
return {
@@ -117,11 +121,9 @@ export function convertBackendSubmissionToSubmissionInfo(
117121
isLatest: data.isLatest,
118122
isPassingReview,
119123
memberId: data.memberId,
120-
review:
121-
primaryReview
122-
? convertBackendReviewToReviewInfo(primaryReview)
123-
: undefined,
124-
reviews: reviewEntries.map(convertBackendReviewToReviewResult),
124+
review: primaryReviewInfo,
125+
reviewInfos,
126+
reviews: reviewResults,
125127
reviewTypeId: primaryReview?.typeId ?? undefined,
126128
submittedDate,
127129
submittedDateString,

0 commit comments

Comments
 (0)