From 21396c968bc80efdf2d1db6164e9daf414f9ed33 Mon Sep 17 00:00:00 2001 From: himaniraghav3 Date: Thu, 4 Dec 2025 12:02:50 +0530 Subject: [PATCH 1/3] PM-3080 disable delete for submission if run not complete --- .../SubmissionsTable/index.jsx | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx b/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx index 9f36dfedd..68ff6353f 100644 --- a/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx +++ b/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx @@ -74,8 +74,29 @@ 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 submission = ( ); submissionsWithDetails.push(submission); - const workflowRunsForSubmission = submissionWorkflowRuns - && submissionWorkflowRuns[subObject.id] - ? submissionWorkflowRuns[subObject.id] - : null; const submissionDetail = ( From 861c2291f23a9074c1b6d4bdaaffb5a429449fbb Mon Sep 17 00:00:00 2001 From: himaniraghav3 Date: Thu, 4 Dec 2025 14:23:29 +0530 Subject: [PATCH 2/3] Show tooltip --- .../SubmissionManagement/Submission/index.jsx | 45 ++++++++++++++----- .../SubmissionsTable/index.jsx | 4 ++ 2 files changed, 38 insertions(+), 11 deletions(-) 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 68ff6353f..19faec324 100644 --- a/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx +++ b/src/shared/components/SubmissionManagement/SubmissionsTable/index.jsx @@ -98,6 +98,9 @@ export default function SubmissionsTable(props) { && moment(subObject.submissionDate).isAfter(submissionPhaseStartDate) && isWorkflowRunComplete; + const hasPendingWorkflowRuns = workflowRunsForSubmission + && workflowRunsForSubmission.some(run => !TERMINAL_STATUSES.includes(run.status)); + const submission = ( ); submissionsWithDetails.push(submission); From c27668824ae2e65b955431955499e6bc74e09c18 Mon Sep 17 00:00:00 2001 From: himaniraghav3 Date: Thu, 4 Dec 2025 14:32:52 +0530 Subject: [PATCH 3/3] update test snapshots --- .../SubmissionManagement/__snapshots__/SubmissionsTable.jsx.snap | 1 + 1 file changed, 1 insertion(+) 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]}