diff --git a/src/components/Judging/Admin/SuperlativeSubmissions.jsx b/src/components/Judging/Admin/SuperlativeSubmissions.jsx index 2f29e308..656a792c 100644 --- a/src/components/Judging/Admin/SuperlativeSubmissions.jsx +++ b/src/components/Judging/Admin/SuperlativeSubmissions.jsx @@ -6,6 +6,7 @@ import { CardLike } from '../../Common' import { Button } from '../../Input' import { H1 } from '../../Typography' import { useHackathon } from '../../../utility/HackathonProvider' +import { JUDGING_RUBRIC, calculateGrade } from '../../../utility/Constants' const SuperlativePrize = styled.div` ${CardLike}; @@ -34,6 +35,37 @@ const SuperlativeSubmissions = ({ superlativePrizes }) => { 'Devpost': project.links.devpost, 'Charity choice': project.charityChoice, } + // compute average scores per rubric and overall grade if grades exist + if (project.grades && Object.keys(project.grades).length > 0) { + const totals = {} + const gradeEntries = Object.values(project.grades) + const count = gradeEntries.length + + gradeEntries.forEach(grade => { + Object.entries(grade).forEach(([key, value]) => { + if (typeof value !== 'number') return + totals[key] = (totals[key] || 0) + value + }) + }) + + // Attach averages for each rubric item + const avgForCalc = {} + JUDGING_RUBRIC.forEach(item => { + const avg = totals[item.id] ? totals[item.id] / count : 0 + projectInfo[item.id] = Number.isFinite(avg) ? avg.toFixed(2) : '' + avgForCalc[item.id] = avg + }) + + // Overall grade based on averaged rubric values + projectInfo['Overall grade'] = calculateGrade(avgForCalc) + } else { + // ensure rubric headers exist even if no grades present + JUDGING_RUBRIC.forEach(item => { + projectInfo[item.id] = '' + }) + projectInfo['Overall grade'] = '' + } + project.teamMembers.forEach((member, index) => { projectInfo[`Member ${index + 1} Name`] = member.name projectInfo[`Member ${index + 1} Email`] = member.email @@ -53,12 +85,11 @@ const SuperlativeSubmissions = ({ superlativePrizes }) => { - {superlativePrizes[prize].map((submission, i) => ( -
  • - {submission.title}{' '} - {submission.draftStatus === 'public' ? 'Published (Submitted)' : 'Draft Only'} -
  • - ))} + {superlativePrizes[prize].map((submission, i) => + submission && submission.draftStatus === 'public' ? ( +
  • {submission.title}
  • + ) : null + )}