diff --git a/.husky/pre-push b/.husky/pre-push index a4447e2c..a0b25c77 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -8,7 +8,7 @@ echo "🚀 Running pre-push checks..." # Run security audit echo "🔒 Running security audit..." -npm audit --audit-level=moderate +npm audit --omit=dev --audit-level=high # Run build check one more time # echo "🏗️ Final build check..." diff --git a/app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx b/app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx index 90425277..ba90db50 100644 --- a/app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx +++ b/app/(landing)/organizations/[id]/hackathons/[hackathonId]/judging/page.tsx @@ -55,8 +55,6 @@ export default function JudgingPage() { useState(null); const [isFetchingResults, setIsFetchingResults] = useState(false); const [winners, setWinners] = useState([]); - const [winnersSummary, setWinnersSummary] = - useState(null); const [isFetchingWinners, setIsFetchingWinners] = useState(false); const [isPublishing, setIsPublishing] = useState(false); const [isCurrentUserJudge, setIsCurrentUserJudge] = useState(false); @@ -352,8 +350,7 @@ export default function JudgingPage() { try { const res = await getJudgingWinners(organizationId, hackathonId); if (res.success && res.data) { - setWinners(res.data.results || []); - setWinnersSummary(res.data); + setWinners(Array.isArray(res.data) ? res.data : []); } } catch (error) { console.error('Error fetching winners:', error); @@ -490,6 +487,7 @@ export default function JudgingPage() { judges={currentJudges} isJudgesLoading={isRefreshingJudges} currentUserId={currentUserId || undefined} + canOverrideScores={canManageJudges} onSuccess={handleSuccess} /> ))} diff --git a/components/organization/cards/GradeSubmissionModal/ModalFooter.tsx b/components/organization/cards/GradeSubmissionModal/ModalFooter.tsx index 41efe08c..c9df713c 100644 --- a/components/organization/cards/GradeSubmissionModal/ModalFooter.tsx +++ b/components/organization/cards/GradeSubmissionModal/ModalFooter.tsx @@ -10,6 +10,7 @@ interface ModalFooterProps { isFetchingCriteria: boolean; hasCriteria: boolean; existingScore: { scores: unknown[]; notes?: string } | null; + mode?: 'judge' | 'organizer-override'; onCancel: () => void; onSubmit: () => void; } @@ -20,9 +21,25 @@ export const ModalFooter = ({ isFetchingCriteria, hasCriteria, existingScore, + mode = 'judge', onCancel, onSubmit, }: ModalFooterProps) => { + const isOverride = mode === 'organizer-override'; + const actionLabel = isOverride + ? existingScore + ? 'Update Override' + : 'Apply Override' + : existingScore + ? 'Update Grade' + : 'Submit Grade'; + + const loadingLabel = isOverride + ? 'Applying...' + : existingScore + ? 'Updating...' + : 'Submitting...'; + return (
@@ -59,12 +76,10 @@ export const ModalFooter = ({ {isLoading ? ( <> - {existingScore ? 'Updating...' : 'Submitting...'} + {loadingLabel} - ) : existingScore ? ( - 'Update Grade' ) : ( - 'Submit Grade' + actionLabel )}
diff --git a/components/organization/cards/GradeSubmissionModal/ScoringSection.tsx b/components/organization/cards/GradeSubmissionModal/ScoringSection.tsx index cb66b083..5887c88a 100644 --- a/components/organization/cards/GradeSubmissionModal/ScoringSection.tsx +++ b/components/organization/cards/GradeSubmissionModal/ScoringSection.tsx @@ -23,6 +23,7 @@ interface ScoringSectionProps { getScoreColor: (percentage: number) => string; overallComment: string; onOverallCommentChange: (value: string) => void; + showComments?: boolean; } export const ScoringSection = ({ @@ -39,6 +40,7 @@ export const ScoringSection = ({ getScoreColor, overallComment, onOverallCommentChange, + showComments = true, }: ScoringSectionProps) => { const getCriterionKey = (criterion: JudgingCriterion) => { return criterion.id || criterion.name || criterion.title; @@ -149,55 +151,58 @@ export const ScoringSection = ({ />
- {/* Comment field */} -
- -