Skip to content

Commit acfc2b4

Browse files
authored
Merge pull request #1283 from topcoder-platform/feat/v6
Feat/v6
2 parents dbd3a51 + 95c7aee commit acfc2b4

File tree

7 files changed

+56
-11
lines changed

7 files changed

+56
-11
lines changed

src/apps/admin/src/lib/components/ChallengeList/ChallengeList.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,15 +261,15 @@ const Actions: FC<{
261261
{hasLegacyId && (
262262
<a
263263
href={
264-
`${EnvironmentConfig.ADMIN.ONLINE_REVIEW_URL}/actions/ViewProjectDetails?pid=${props.challenge.legacyId}` /* eslint-disable-line max-len */
264+
`${EnvironmentConfig.ADMIN.REVIEW_UI_URL}/=${props.challenge.id}` /* eslint-disable-line max-len */
265265
}
266266
target='_blank'
267267
rel='noreferrer'
268268
>
269-
Online Review
269+
Review UI
270270
</a>
271271
)}
272-
{!hasLegacyId && <span>Online Review</span>}
272+
{!hasLegacyId && <span>Review UI</span>}
273273
</li>
274274
</ul>
275275
</DropdownMenu>

src/apps/review/src/lib/components/ChallengeDetailsContent/ChallengeDetailsContent.tsx

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/**
22
* Challenge Details Content.
33
*/
4-
import { FC, ReactNode, useContext, useMemo } from 'react'
4+
import { FC, ReactNode, useCallback, useContext, useMemo } from 'react'
5+
import { toast } from 'react-toastify'
56

67
import { ActionLoading } from '~/apps/admin/src/lib'
78

@@ -185,6 +186,37 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
185186
isLoadingBool: isDownloadingSubmissionBool,
186187
downloadSubmission,
187188
}: useDownloadSubmissionProps = useDownloadSubmission()
189+
const submissionsById = useMemo(() => {
190+
const map = new Map<string, BackendSubmission>()
191+
props.submissions.forEach(submission => {
192+
if (submission?.id) {
193+
map.set(submission.id, submission)
194+
}
195+
})
196+
return map
197+
}, [props.submissions])
198+
const handleSubmissionDownload = useCallback((submissionId: string) => {
199+
const submission = submissionsById.get(submissionId)
200+
if (submission && submission.isFileSubmission === false) {
201+
const targetUrl = submission.url?.trim()
202+
if (targetUrl) {
203+
if (typeof window !== 'undefined') {
204+
const openedWindow = window.open(targetUrl, '_blank', 'noopener,noreferrer')
205+
if (openedWindow === null) {
206+
toast.error('We could not open the submission URL. Check your pop-up blocker and try again.')
207+
}
208+
} else {
209+
toast.error('Unable to open the submission URL from this environment.')
210+
}
211+
} else {
212+
toast.error('Submission URL is not available for this entry.')
213+
}
214+
215+
return
216+
}
217+
218+
downloadSubmission(submissionId)
219+
}, [downloadSubmission, submissionsById])
188220
const {
189221
isLoading: isLoadingProjectResult,
190222
projectResults,
@@ -335,7 +367,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
335367

336368
if (SUBMISSION_TAB_KEYS.has(selectedTabNormalized)) {
337369
return renderSubmissionTab({
338-
downloadSubmission,
370+
downloadSubmission: handleSubmissionDownload,
339371
isActiveChallenge: props.isActiveChallenge,
340372
isDownloadingSubmission,
341373
isLoadingSubmission: props.isLoadingSubmission,
@@ -361,7 +393,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
361393
checkpointReviewMinimumPassingScore={props.checkpointReviewMinimumPassingScore}
362394
isLoading={props.isLoadingSubmission}
363395
isDownloading={isDownloadingSubmission}
364-
downloadSubmission={downloadSubmission}
396+
downloadSubmission={handleSubmissionDownload}
365397
mode={checkpointMode}
366398
/>
367399
)
@@ -373,7 +405,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
373405
isLoading={isLoadingProjectResult}
374406
projectResults={projectResults}
375407
isDownloading={isDownloadingSubmission}
376-
downloadSubmission={downloadSubmission}
408+
downloadSubmission={handleSubmissionDownload}
377409
/>
378410
)
379411
}
@@ -386,7 +418,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
386418
approvalMinimumPassingScore={props.approvalMinimumPassingScore}
387419
isLoadingReview={props.isLoadingSubmission}
388420
isDownloading={isDownloadingSubmission}
389-
downloadSubmission={downloadSubmission}
421+
downloadSubmission={handleSubmissionDownload}
390422
isActiveChallenge={props.isActiveChallenge}
391423
/>
392424
)
@@ -400,7 +432,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
400432
postMortemMinimumPassingScore={props.postMortemMinimumPassingScore}
401433
isLoadingReview={props.isLoadingSubmission}
402434
isDownloading={isDownloadingSubmission}
403-
downloadSubmission={downloadSubmission}
435+
downloadSubmission={handleSubmissionDownload}
404436
isActiveChallenge={props.isActiveChallenge}
405437
columnLabel='Post-Mortem'
406438
/>
@@ -415,7 +447,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
415447
postMortemMinimumPassingScore={props.postMortemMinimumPassingScore}
416448
isLoadingReview={props.isLoadingSubmission}
417449
isDownloading={isDownloadingSubmission}
418-
downloadSubmission={downloadSubmission}
450+
downloadSubmission={handleSubmissionDownload}
419451
isActiveChallenge={props.isActiveChallenge}
420452
phaseIdFilter={props.selectedPhaseId}
421453
/>
@@ -430,7 +462,7 @@ export const ChallengeDetailsContent: FC<Props> = (props: Props) => {
430462
reviewMinimumPassingScore={props.reviewMinimumPassingScore}
431463
isLoadingReview={props.isLoadingSubmission}
432464
isDownloading={isDownloadingSubmission}
433-
downloadSubmission={downloadSubmission}
465+
downloadSubmission={handleSubmissionDownload}
434466
mappingReviewAppeal={props.mappingReviewAppeal}
435467
isActiveChallenge={props.isActiveChallenge}
436468
/>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ export interface BackendSubmission {
4848
* Indicates whether the submission is the latest for the member.
4949
*/
5050
isLatest?: boolean
51+
/**
52+
* Flag indicating whether the submission includes a downloadable file.
53+
* When false the submission is represented only by a URL.
54+
*/
55+
isFileSubmission?: boolean
5156
}
5257

5358
/**

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export interface SubmissionInfo {
5656
* Submission type (e.g. CONTEST_SUBMISSION, CHECKPOINT_SUBMISSION).
5757
*/
5858
type?: string
59+
/**
60+
* Flag indicating whether the submission includes an uploaded file.
61+
*/
62+
isFileSubmission?: boolean
5963
}
6064

6165
/**
@@ -118,6 +122,7 @@ export function convertBackendSubmissionToSubmissionInfo(
118122
return {
119123
aggregateScore,
120124
id: data.id,
125+
isFileSubmission: data.isFileSubmission,
121126
isLatest: data.isLatest,
122127
isPassingReview,
123128
memberId: data.memberId,

src/config/environments/default.env.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ export const ADMIN = {
155155
DEFAULT_PAYMENT_TERMS: 1,
156156
DIRECT_URL: 'https://www.topcoder-dev.com/direct',
157157
ONLINE_REVIEW_URL: 'https://software.topcoder-dev.com/review',
158+
REVIEW_UI_URL: 'https://review.topcoder-dev.com',
158159
SUBMISSION_SCAN_TOPIC: 'submission.scan.complete',
159160
WORK_MANAGER_URL: 'https://challenges.topcoder-dev.com',
160161
}

src/config/environments/global-config.model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export interface GlobalConfig {
6262
DIRECT_URL: string
6363
WORK_MANAGER_URL: string
6464
ONLINE_REVIEW_URL: string
65+
REVIEW_UI_URL: string
6566
CHALLENGE_URL: string
6667
AV_SCAN_SCORER_REVIEW_TYPE_ID: string
6768
AGREE_ELECTRONICALLY: string

src/config/environments/prod.env.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export const ADMIN = {
2323
DEFAULT_PAYMENT_TERMS: 1,
2424
DIRECT_URL: 'https://www.topcoder.com/direct',
2525
ONLINE_REVIEW_URL: 'https://software.topcoder.com/review',
26+
REVIEW_UI_URL: 'https://review.topcoder.com',
2627
SUBMISSION_SCAN_TOPIC: 'submission.scan.complete',
2728
WORK_MANAGER_URL: 'https://challenges.topcoder.com',
2829
}

0 commit comments

Comments
 (0)