- | {reviewer.reviewer} |
+
+
+ {reviewer.reviewer}
+ {!confirmedPromotions.includes(reviewer.reviewer) && (
+ handleCheckboxChange(reviewer.id)}
+ style={{
+ marginTop: '4px',
+ cursor: 'pointer',
+ width: '16px',
+ height: '16px',
+ }}
+ />
+ )}
+ {!confirmedPromotions.includes(reviewer.reviewer) ? (
+
+ ) : (
+
+ ✅ Promoted
+
+ )}
+
+ |
{
)}
+ {selectedForPromotion.length > 0 && (
+
+
+ {selectedForPromotion.length} selected
+
+
+
+
+ )}
+ {showBatchConfirm && (
+
+
+
+
+ 🏆 Confirm Batch Promotion
+
+
+
+
+
+ You are about to promote {selectedForPromotion.length} reviewer(s):
+
+
+ {reviewerData
+ .filter(r => selectedForPromotion.includes(r.id))
+ .map(r => (
+ -
+ {r.reviewer}
+
+ ))}
+
+
+ Are you sure you want to promote all selected reviewers?
+
+
+
+
+
+
+
+
+ )}
+ {promotionCandidate && (
+
+ )}
);
};
diff --git a/src/components/PRGradingScreen/PromotionConfirmationBox.jsx b/src/components/PRGradingScreen/PromotionConfirmationBox.jsx
new file mode 100644
index 0000000000..2244539b6c
--- /dev/null
+++ b/src/components/PRGradingScreen/PromotionConfirmationBox.jsx
@@ -0,0 +1,292 @@
+import PropTypes from 'prop-types';
+import styles from './PRGradingScreen.module.css';
+
+function PromotionConfirmationBox({ reviewer, onConfirm, onCancel, darkMode }) {
+ const { reviewerName, teamCode, teamReviewerName, weeklyPRs } = reviewer;
+
+ const totalPRs = weeklyPRs.reduce((sum, w) => sum + w.count, 0);
+ const avgPRs = weeklyPRs.length > 0 ? (totalPRs / weeklyPRs.length).toFixed(1) : 0;
+ const isConsistent = weeklyPRs.every(w => w.count >= 8);
+
+ return (
+
+
+ {/* Header */}
+
+ 🏆 Confirm Promotion
+
+
+
+ {/* Body */}
+
+ {/* Reviewer Info */}
+
+
+ Reviewer: {reviewerName}
+
+
+ Team: {teamCode}
+
+
+ Team Reviewer Name: {teamReviewerName}
+
+
+
+ {/* Weekly PR Stats */}
+
+ Weekly PR Stats
+
+
+
+
+ |
+ Week
+ |
+
+ PR Count
+ |
+
+
+
+ {weeklyPRs.map(w => (
+
+ |
+ {w.week}
+ |
+
+ {w.count}
+ |
+
+ ))}
+
+
+
+ {/* Summary Stats */}
+
+
+
+ {totalPRs}
+
+
+ Total PRs
+
+
+
+
+ {avgPRs}
+
+
+ Avg PRs/Week
+
+
+
+
+ {isConsistent ? '✅' : '⚠️'}
+
+
+ {isConsistent ? 'Consistent' : 'Inconsistent'}
+
+
+
+
+ {/* Confirmation question */}
+
+ Are you sure you want to confirm promotion for{' '}
+ {reviewerName}?
+
+
+
+ {/* Footer */}
+
+
+
+
+
+
+ );
+}
+
+PromotionConfirmationBox.propTypes = {
+ reviewer: PropTypes.shape({
+ reviewerId: PropTypes.string,
+ reviewerName: PropTypes.string.isRequired,
+ teamCode: PropTypes.string,
+ teamReviewerName: PropTypes.string,
+ weeklyPRs: PropTypes.arrayOf(
+ PropTypes.shape({
+ week: PropTypes.string,
+ count: PropTypes.number,
+ }),
+ ),
+ }).isRequired,
+ onConfirm: PropTypes.func.isRequired,
+ onCancel: PropTypes.func.isRequired,
+ darkMode: PropTypes.bool,
+};
+
+PromotionConfirmationBox.defaultProps = {
+ darkMode: false,
+};
+
+export default PromotionConfirmationBox;
|