From 4cdc040df936f6bd8b8a28ca9849113d3512007c Mon Sep 17 00:00:00 2001 From: himaniraghav3 Date: Tue, 21 Oct 2025 23:19:14 +0530 Subject: [PATCH 1/2] Fix reopen review view --- .../components/TableReview/TableReview.tsx | 99 +++------------- .../common/TableColumnRenderers.module.scss | 6 + .../common/TableColumnRenderers.tsx | 109 +++++++++++++++++- 3 files changed, 124 insertions(+), 90 deletions(-) diff --git a/src/apps/review/src/lib/components/TableReview/TableReview.tsx b/src/apps/review/src/lib/components/TableReview/TableReview.tsx index bc4e173ce..f9dbd91f1 100644 --- a/src/apps/review/src/lib/components/TableReview/TableReview.tsx +++ b/src/apps/review/src/lib/components/TableReview/TableReview.tsx @@ -34,7 +34,6 @@ import { aggregateSubmissionReviews, challengeHasSubmissionLimit, isReviewPhase, - isReviewPhaseCurrentlyOpen, refreshChallengeReviewData, REOPEN_MESSAGE_OTHER, REOPEN_MESSAGE_SELF, @@ -85,69 +84,6 @@ type RestrictionResult = { message?: string } -function createReopenActionButtons( - challengeInfo: ChallengeDetailContextModel['challengeInfo'], - submission: SubmissionRow, - aggregatedReviews: AggregatedReviewDetail[] | undefined, - { - canManageCompletedReviews, - isReopening, - openReopenDialog, - pendingReopen, - }: { - canManageCompletedReviews: boolean - isReopening: boolean - openReopenDialog: (submission: SubmissionRow, review: AggregatedReviewDetail) => void - pendingReopen: PendingReopenState | undefined - }, -): JSX.Element[] { - if (!canManageCompletedReviews) { - return [] - } - - const buttons: JSX.Element[] = [] - const reviews = aggregatedReviews ?? [] - - reviews.forEach(review => { - const reviewInfo = review.reviewInfo - if (!reviewInfo?.id) { - return - } - - if ((reviewInfo.status ?? '').toUpperCase() !== 'COMPLETED') { - return - } - - if (!isReviewPhaseCurrentlyOpen(challengeInfo, reviewInfo.phaseId)) { - return - } - - const isTargetReview = pendingReopen?.review?.reviewInfo?.id === reviewInfo.id - - function handleReopenClick(): void { - openReopenDialog(submission, { - ...review, - reviewInfo, - } as AggregatedReviewDetail) - } - - buttons.push( - , - ) - }) - - return buttons -} - export const TableReview: FC = (props: TableReviewProps) => { const className: string | undefined = props.className const datas: SubmissionInfo[] = props.datas @@ -493,20 +429,6 @@ export const TableReview: FC = (props: TableReviewProps) => { } appendAction(buildPrimaryAction(), 'primary') - - const reopenButtons = createReopenActionButtons( - challengeInfo, - submission, - reviews, - { - canManageCompletedReviews, - isReopening, - openReopenDialog, - pendingReopen, - }, - ) - - reopenButtons.forEach(button => appendAction(button, 'reopen')) appendAction(buildHistoryAction(), 'history') if (!actionEntries.length) { @@ -536,16 +458,11 @@ export const TableReview: FC = (props: TableReviewProps) => { ) }, [ - canManageCompletedReviews, canViewHistory, - challengeInfo, handleHistoryButtonClick, hasReviewRole, historyByMember, - isReopening, myReviewerResourceIds, - openReopenDialog, - pendingReopen, shouldShowHistoryActions, ]) @@ -600,7 +517,16 @@ export const TableReview: FC = (props: TableReviewProps) => { { columnId: `score-${index}`, label: `Score ${index + 1}`, - renderer: (submission: SubmissionRow) => renderScoreCell(submission, index, scoreVisibilityConfig), + renderer: (submission: SubmissionRow) => renderScoreCell( + submission, + index, + scoreVisibilityConfig, + challengeInfo, + pendingReopen, + canManageCompletedReviews, + isReopening, + openReopenDialog, + ), type: 'element', }, ) @@ -624,6 +550,11 @@ export const TableReview: FC = (props: TableReviewProps) => { renderActionsCell, scoreVisibilityConfig, shouldShowAggregatedActions, + canManageCompletedReviews, + isReopening, + openReopenDialog, + challengeInfo, + pendingReopen, ]) const columnsMobile = useMemo[][]>( diff --git a/src/apps/review/src/lib/components/common/TableColumnRenderers.module.scss b/src/apps/review/src/lib/components/common/TableColumnRenderers.module.scss index 8e6a0ea23..0e4718fdc 100644 --- a/src/apps/review/src/lib/components/common/TableColumnRenderers.module.scss +++ b/src/apps/review/src/lib/components/common/TableColumnRenderers.module.scss @@ -13,6 +13,12 @@ } } +.scoreReopenBlock { + display: flex; + gap: 4px; + align-items: center; +} + .tooltipTrigger { display: inline-block; } diff --git a/src/apps/review/src/lib/components/common/TableColumnRenderers.tsx b/src/apps/review/src/lib/components/common/TableColumnRenderers.tsx index 3e99a51cd..a14f3bbcf 100644 --- a/src/apps/review/src/lib/components/common/TableColumnRenderers.tsx +++ b/src/apps/review/src/lib/components/common/TableColumnRenderers.tsx @@ -12,6 +12,8 @@ import { VIRUS_SCAN_FAILED_MESSAGE, } from '../../utils/constants' import { getReviewRoute } from '../../utils/routes' +import { ChallengeDetailContextModel, ChallengeInfo } from '../../models' +import { isReviewPhaseCurrentlyOpen } from '../../utils' import { formatScoreDisplay, @@ -19,6 +21,7 @@ import { getProfileUrl, } from './columnUtils' import type { + AggregatedReviewDetail, DownloadButtonConfig, ScoreVisibilityConfig, SubmissionRow, @@ -301,6 +304,76 @@ export function renderReviewerCell( ) } +interface PendingReopenState { + review?: AggregatedReviewDetail + submission?: SubmissionRow + isOwnReview?: boolean +} + +function createReopenActionButtons( + challengeInfo: ChallengeDetailContextModel['challengeInfo'], + submission: SubmissionRow, + aggregatedReviews: AggregatedReviewDetail[] | undefined, + { + canManageCompletedReviews, + isReopening, + openReopenDialog, + pendingReopen, + }: { + canManageCompletedReviews: boolean + isReopening: boolean + openReopenDialog: (submission: SubmissionRow, review: AggregatedReviewDetail) => void + pendingReopen: PendingReopenState | undefined + }, +): JSX.Element[] { + if (!canManageCompletedReviews) { + return [] + } + + const buttons: JSX.Element[] = [] + const reviews = aggregatedReviews ?? [] + + reviews.forEach(review => { + const reviewInfo = review.reviewInfo + if (!reviewInfo?.id) { + return + } + + if ((reviewInfo.status ?? '').toUpperCase() !== 'COMPLETED') { + return + } + + if (!isReviewPhaseCurrentlyOpen(challengeInfo, reviewInfo.phaseId)) { + return + } + + const isTargetReview = pendingReopen?.review?.reviewInfo?.id === reviewInfo.id + + function handleReopenClick(): void { + openReopenDialog(submission, { + ...review, + reviewInfo, + } as AggregatedReviewDetail) + } + + buttons.push( + // eslint-disable-next-line jsx-a11y/control-has-associated-label + , + ) + }) + + return buttons +} + /** * Renders an individual review score, linking to the review detail when allowed. */ @@ -308,6 +381,11 @@ export function renderScoreCell( submission: SubmissionRow, reviewIndex: number, config: ScoreVisibilityConfig, + challengeInfo?: ChallengeInfo | undefined, + pendingReopen?: PendingReopenState | undefined, + canManageCompletedReviews?: boolean, + isReopening?: boolean, + openReopenDialog?: (submission: SubmissionRow, review: AggregatedReviewDetail) => void, ): JSX.Element { const configWithDefaults: ScoreVisibilityConfig = config const { @@ -349,6 +427,20 @@ export function renderScoreCell( const formattedScore = formatScoreDisplay(reviewDetail.finalScore) const scoreLabel = formattedScore ?? '--' + const reopenButtons = createReopenActionButtons( + challengeInfo, + submission, + [reviewDetail], // pass single review in an array + { + canManageCompletedReviews: !!canManageCompletedReviews, + isReopening: !!isReopening, + openReopenDialog: openReopenDialog as (submission: SubmissionRow, review: AggregatedReviewDetail) => void, + pendingReopen, + }, + ) + + const reopenButton = reopenButtons.length ? reopenButtons[0] : undefined + if (!canViewScorecard) { return ( - {scoreLabel} - +
+ + {scoreLabel} + + + {reopenButton} +
) + } /** From 49c1347fa28fd4330ef447dabc5026f332502e87 Mon Sep 17 00:00:00 2001 From: himaniraghav3 Date: Wed, 22 Oct 2025 00:01:25 +0530 Subject: [PATCH 2/2] PM-2057 Fix line breaks in markdown --- .../components/ScorecardQuestionView/ScorecardQuestionView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/review/src/lib/components/ScorecardQuestionView/ScorecardQuestionView.tsx b/src/apps/review/src/lib/components/ScorecardQuestionView/ScorecardQuestionView.tsx index 25d13e293..ee28b7baf 100644 --- a/src/apps/review/src/lib/components/ScorecardQuestionView/ScorecardQuestionView.tsx +++ b/src/apps/review/src/lib/components/ScorecardQuestionView/ScorecardQuestionView.tsx @@ -411,7 +411,7 @@ function renderResponseCommentRow({
')} className={styles.mardownReview} />