Skip to content

Commit 40057bb

Browse files
authored
Merge pull request #1191 from topcoder-platform/diazz-admin-code-30377611
Topcoder Admin App - Add Non-MM Submission Management
2 parents 2ef3b3e + 89cd005 commit 40057bb

25 files changed

+662
-133
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"@stripe/stripe-js": "1.41.0",
3131
"@tinymce/tinymce-react": "^6.2.1",
3232
"@types/codemirror": "5.60.15",
33+
"amazon-s3-uri": "^0.1.1",
3334
"apexcharts": "^3.36.0",
3435
"axios": "^1.7.9",
3536
"browser-cookies": "^1.2.0",

src/apps/admin/src/challenge-management/ManageSubmissionPage/ManageSubmissionPage.tsx

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
/**
22
* Manage Submission Page.
33
*/
4-
import { FC } from 'react'
4+
import { FC, useMemo } from 'react'
55
import { useParams } from 'react-router-dom'
66
import classNames from 'classnames'
77

88
import { LinkButton } from '~/libs/ui'
99

1010
import {
11+
useDownloadSubmission,
12+
useDownloadSubmissionProps,
13+
useFetchChallenge,
14+
useFetchChallengeProps,
15+
useManageAVScan,
16+
useManageAVScanProps,
1117
useManageBusEvent,
1218
useManageBusEventProps,
1319
useManageChallengeSubmissions,
@@ -20,6 +26,7 @@ import {
2026
TableLoading,
2127
TableNoRecord,
2228
} from '../../lib'
29+
import { checkIsMM } from '../../lib/utils'
2330

2431
import styles from './ManageSubmissionPage.module.scss'
2532

@@ -35,7 +42,13 @@ export const ManageSubmissionPage: FC<Props> = (props: Props) => {
3542
= useManageBusEvent()
3643

3744
const {
38-
isLoading,
45+
isLoading: isLoadingChallenge,
46+
challengeInfo,
47+
}: useFetchChallengeProps = useFetchChallenge(challengeId)
48+
const isMM = useMemo(() => checkIsMM(challengeInfo), [challengeInfo])
49+
50+
const {
51+
isLoading: isLoadingSubmission,
3952
submissions,
4053
isRemovingSubmission,
4154
isRemovingSubmissionBool,
@@ -48,6 +61,19 @@ export const ManageSubmissionPage: FC<Props> = (props: Props) => {
4861
}: useManageChallengeSubmissionsProps
4962
= useManageChallengeSubmissions(challengeId)
5063

64+
const {
65+
isLoading: isDownloadingSubmission,
66+
isLoadingBool: isDownloadingSubmissionBool,
67+
downloadSubmission,
68+
}: useDownloadSubmissionProps = useDownloadSubmission()
69+
const {
70+
isLoading: isDoingAvScan,
71+
isLoadingBool: isDoingAvScanBool,
72+
doPostBusEvent: doPostBusEventAvScan,
73+
}: useManageAVScanProps = useManageAVScan()
74+
75+
const isLoading = isLoadingSubmission || isLoadingChallenge
76+
5177
return (
5278
<PageWrapper
5379
pageTitle='Submission Management'
@@ -67,6 +93,10 @@ export const ManageSubmissionPage: FC<Props> = (props: Props) => {
6793
) : (
6894
<div className={styles.blockTableContainer}>
6995
<SubmissionTable
96+
isDoingAvScan={isDoingAvScan}
97+
doPostBusEventAvScan={doPostBusEventAvScan}
98+
isDownloading={isDownloadingSubmission}
99+
downloadSubmission={downloadSubmission}
70100
data={submissions}
71101
isRemovingSubmission={isRemovingSubmission}
72102
doRemoveSubmission={doRemoveSubmission}
@@ -80,9 +110,12 @@ export const ManageSubmissionPage: FC<Props> = (props: Props) => {
80110
doPostBusEvent={doPostBusEvent}
81111
showSubmissionHistory={showSubmissionHistory}
82112
setShowSubmissionHistory={setShowSubmissionHistory}
113+
isMM={isMM}
83114
/>
84115

85-
{(isRemovingSubmissionBool
116+
{(isDoingAvScanBool
117+
|| isDownloadingSubmissionBool
118+
|| isRemovingSubmissionBool
86119
|| isRunningTestBool
87120
|| isRemovingReviewSummationsBool) && (
88121
<ActionLoading />

src/apps/admin/src/config/busEvent.config.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
*/
44
import { v4 as uuidv4 } from 'uuid'
55

6-
import { RequestBusAPI } from '../lib/models'
6+
import {
7+
RequestBusAPI,
8+
RequestBusAPIAVScan,
9+
RequestBusAPIAVScanPayload,
10+
} from '../lib/models'
711

812
/**
9-
* Create data for bus event
13+
* Create data for data submission marathon match bus event
1014
* @param submissionId submission id
1115
* @param testType test type
1216
* @returns data for bus event
@@ -27,3 +31,19 @@ export const CREATE_BUS_EVENT_DATA_SUBMISSION_MARATHON_MATCH = (
2731
.toISOString(),
2832
topic: 'submission.notification.score',
2933
})
34+
35+
/**
36+
* Create data for av rescan bus event
37+
* @param payload av rescan payload
38+
* @returns data for bus event
39+
*/
40+
export const CREATE_BUS_EVENT_AV_RESCAN = (
41+
payload: RequestBusAPIAVScanPayload,
42+
): RequestBusAPIAVScan => ({
43+
'mime-type': 'application/json',
44+
originator: 'submission-processor',
45+
payload,
46+
timestamp: new Date()
47+
.toISOString(),
48+
topic: 'avscan.action.scan',
49+
})

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

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
import { useEventCallback } from '../../hooks'
2222
import { Challenge, ChallengeFilterCriteria, ChallengeType } from '../../models'
2323
import { Paging } from '../../models/challenge-management/Pagination'
24-
import { checkIsMM } from '../../utils'
2524

2625
import { MobileListView } from './MobileListView'
2726
import styles from './ChallengeList.module.scss'
@@ -135,7 +134,6 @@ const Actions: FC<{
135134
challenge: Challenge
136135
currentFilters: ChallengeFilterCriteria
137136
}> = props => {
138-
const isMM = useMemo(() => checkIsMM(props.challenge), [props.challenge])
139137
const [openDropdown, setOpenDropdown] = useState(false)
140138
const navigate = useNavigate()
141139
const goToManageUser = useEventCallback(() => {
@@ -202,16 +200,14 @@ const Actions: FC<{
202200
>
203201
Users
204202
</li>
205-
{isMM && (
206-
<li
207-
onClick={function onClick() {
208-
navigate(`${props.challenge.id}/manage-submission`)
209-
setOpenDropdown(false)
210-
}}
211-
>
212-
Submissions
213-
</li>
214-
)}
203+
<li
204+
onClick={function onClick() {
205+
navigate(`${props.challenge.id}/manage-submission`)
206+
setOpenDropdown(false)
207+
}}
208+
>
209+
Submissions
210+
</li>
215211
</ul>
216212
</DropdownMenu>
217213

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Submission Table Actions For Non MM Challenge.
3+
*/
4+
import { Dispatch, FC, SetStateAction } from 'react'
5+
6+
import { Button } from '~/libs/ui'
7+
8+
import { IsRemovingType, Submission } from '../../models'
9+
10+
interface Props {
11+
data: Submission
12+
showSubmissionHistory: IsRemovingType
13+
setShowSubmissionHistory: Dispatch<SetStateAction<IsRemovingType>>
14+
}
15+
16+
export const ShowHistoryButton: FC<Props> = (props: Props) => (
17+
<Button
18+
onClick={function onClick() {
19+
props.setShowSubmissionHistory(prev => ({
20+
...prev,
21+
[props.data.id]: !prev[props.data.id],
22+
}))
23+
}}
24+
>
25+
{props.showSubmissionHistory[props.data.id] ? 'Hide' : 'Show'}
26+
{' '}
27+
History
28+
</Button>
29+
)
30+
31+
export default ShowHistoryButton

src/apps/admin/src/lib/components/SubmissionTable/SubmissionTable.module.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
.rowActions {
1414
display: flex;
1515
align-items: center;
16+
17+
@include ltelg {
18+
flex-wrap: wrap;
19+
}
1620
}
1721

1822
.desktopTable {

0 commit comments

Comments
 (0)