diff --git a/__tests__/shared/components/SubmissionManagement/__snapshots__/SubmissionsTable.jsx.snap b/__tests__/shared/components/SubmissionManagement/__snapshots__/SubmissionsTable.jsx.snap
index ab31d14b9..e5b7d8ccd 100644
--- a/__tests__/shared/components/SubmissionManagement/__snapshots__/SubmissionsTable.jsx.snap
+++ b/__tests__/shared/components/SubmissionManagement/__snapshots__/SubmissionsTable.jsx.snap
@@ -30,6 +30,7 @@ exports[`Matches shallow shapshot 1`] = `
"id": "test-challenge",
}
}
+ hasPendingWorkflowRuns={null}
onDelete={[Function]}
onDownload={[Function]}
onOpenDownloadArtifactsModal={[Function]}
diff --git a/src/shared/components/SubmissionManagement/Submission/index.jsx b/src/shared/components/SubmissionManagement/Submission/index.jsx
index 93829d147..56506e323 100644
--- a/src/shared/components/SubmissionManagement/Submission/index.jsx
+++ b/src/shared/components/SubmissionManagement/Submission/index.jsx
@@ -42,6 +42,7 @@ export default function Submission(props) {
onOpenRatingsListModal,
status,
allowDelete,
+ hasPendingWorkflowRuns,
} = props;
const formatDate = date => moment(+new Date(date)).format('MMM DD, YYYY hh:mm A');
const onDownloadSubmission = onDownload.bind(1, submissionObject.id);
@@ -66,6 +67,12 @@ export default function Submission(props) {
}
}
+ const showDeleteButton = status !== CHALLENGE_STATUS.COMPLETED
+ && track === COMPETITION_TRACKS.DES
+ && safeForDownloadCheck === true;
+
+ const showPendingTooltip = !allowDelete && hasPendingWorkflowRuns;
+
return (
|
@@ -146,17 +153,32 @@ export default function Submission(props) {
onClick={() => onDownload(submissionObject.id)}
>
*/ }
- {status !== CHALLENGE_STATUS.COMPLETED
- && track === COMPETITION_TRACKS.DES
- && safeForDownloadCheck === true && (
-
+ {showDeleteButton && (
+ !showPendingTooltip ? (
+
+ ) : (
+ // Disabled delete button with tooltip when workflow run is pending
+ (
+
+ You can delete this submission only after the review is complete.
+
+ )}
+ >
+
+
+ )
)
}
{ !isTopCrowdChallenge
@@ -217,4 +239,5 @@ Submission.propTypes = {
allowDelete: PT.bool.isRequired,
onOpenDownloadArtifactsModal: PT.func,
onOpenRatingsListModal: PT.func,
+ hasPendingWorkflowRuns: PT.bool.isRequired,
};
diff --git a/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx b/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx
index 9f36dfedd..19faec324 100644
--- a/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx
+++ b/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx
@@ -74,8 +74,32 @@ export default function SubmissionsTable(props) {
submissionObjects.forEach((subObject) => {
// submissionPhaseStartDate will be the start date of
// the current submission/checkpoint or empty string if any other phase
+
+ const TERMINAL_STATUSES = [
+ 'COMPLETED',
+ 'FAILURE',
+ 'CANCELLED',
+ 'SUCCESS',
+ ];
+
+ const workflowRunsForSubmission = submissionWorkflowRuns
+ && submissionWorkflowRuns[subObject.id]
+ ? submissionWorkflowRuns[subObject.id]
+ : null;
+
+ let isWorkflowRunComplete = true; // allow delete if no runs
+
+ if (workflowRunsForSubmission && workflowRunsForSubmission.length > 0) {
+ isWorkflowRunComplete = workflowRunsForSubmission.length === 0
+ || workflowRunsForSubmission.every(run => TERMINAL_STATUSES.includes(run.status));
+ }
+
const allowDelete = submissionPhaseStartDate
- && moment(subObject.submissionDate).isAfter(submissionPhaseStartDate);
+ && moment(subObject.submissionDate).isAfter(submissionPhaseStartDate)
+ && isWorkflowRunComplete;
+
+ const hasPendingWorkflowRuns = workflowRunsForSubmission
+ && workflowRunsForSubmission.some(run => !TERMINAL_STATUSES.includes(run.status));
const submission = (
);
submissionsWithDetails.push(submission);
- const workflowRunsForSubmission = submissionWorkflowRuns
- && submissionWorkflowRuns[subObject.id]
- ? submissionWorkflowRuns[subObject.id]
- : null;
const submissionDetail = (
|