diff --git a/apps/frontend/src/app/[locale]/lems/(volunteer)/(dashboard)/scorekeeper/components/awards-presentation/awards-presentation-wrapper.tsx b/apps/frontend/src/app/[locale]/lems/(volunteer)/(dashboard)/scorekeeper/components/awards-presentation/awards-presentation-wrapper.tsx index 4384cbec7..ff3f59770 100644 --- a/apps/frontend/src/app/[locale]/lems/(volunteer)/(dashboard)/scorekeeper/components/awards-presentation/awards-presentation-wrapper.tsx +++ b/apps/frontend/src/app/[locale]/lems/(volunteer)/(dashboard)/scorekeeper/components/awards-presentation/awards-presentation-wrapper.tsx @@ -13,32 +13,52 @@ export function AwardsPresentationWrapper() { const mappedAwards = useMemo(() => { return (data.judging?.awards ?? []) - .filter(award => award.type === 'TEAM' && award.winner && 'team' in award.winner) + .filter(award => award.winner !== null && award.winner !== undefined) .map(award => { - const winner = award.winner as TeamWinner; - const teamData = winner.team; + if (!award.winner) return undefined; - // Ensure team data is valid before accessing properties - if (!teamData || !teamData.id || !teamData.name) { - return undefined; - } - - const mappedAward: PresentationAward = { + const baseAward = { id: award.id, name: award.name, index: award.index, place: award.place, type: award.type, - isOptional: award.isOptional, - winner: { - id: teamData.id, - name: teamData.name, - number: teamData.number ? String(teamData.number) : '', - city: teamData.city || '', - affiliation: teamData.affiliation || '' - } + isOptional: award.isOptional }; - return mappedAward; + + // Handle TEAM awards + if (award.type === 'TEAM' && 'team' in award.winner) { + const winner = award.winner as TeamWinner; + const teamData = winner.team; + + // Ensure team data is valid before accessing properties + if (!teamData || !teamData.id || !teamData.name) { + return undefined; + } + + return { + ...baseAward, + winner: { + id: teamData.id, + name: teamData.name, + number: teamData.number ? String(teamData.number) : '', + city: teamData.city || '', + affiliation: teamData.affiliation || '' + } + } as PresentationAward; + } + + // Handle PERSONAL awards + if (award.type === 'PERSONAL' && 'name' in award.winner) { + return { + ...baseAward, + winner: { + name: award.winner.name + } + } as PresentationAward; + } + + return undefined; }) .filter((award): award is PresentationAward => award !== undefined); }, [data.judging?.awards]); diff --git a/apps/frontend/src/app/[locale]/lems/(volunteer)/audience-display/page.tsx b/apps/frontend/src/app/[locale]/lems/(volunteer)/audience-display/page.tsx index 0a56cf2c9..e141589f0 100644 --- a/apps/frontend/src/app/[locale]/lems/(volunteer)/audience-display/page.tsx +++ b/apps/frontend/src/app/[locale]/lems/(volunteer)/audience-display/page.tsx @@ -60,26 +60,48 @@ export default function AudienceDisplayPage() { const awardsAssigned = rawData.division.awardsAssigned; const awards = (rawData.division.judging?.awards ?? []) - .filter(award => award.type === 'TEAM' && award.winner && 'team' in award.winner) + .filter(award => award.winner !== null && award.winner !== undefined) .map(award => { - const winner = award.winner as TeamWinner; + if (!award.winner) return undefined; - return { + const baseAward = { id: award.id, name: award.name, index: award.index, place: award.place, type: award.type, - isOptional: award.isOptional, - winner: { - id: winner.team.id, - name: winner.team.name, - number: winner.team.number, - city: winner.team.city, - affiliation: winner.team.affiliation - } + isOptional: award.isOptional }; - }); + + // Handle TEAM awards + if (award.type === 'TEAM' && 'team' in award.winner) { + const winner = award.winner as TeamWinner; + + return { + ...baseAward, + winner: { + id: winner.team.id, + name: winner.team.name, + number: winner.team.number, + city: winner.team.city, + affiliation: winner.team.affiliation + } + }; + } + + // Handle PERSONAL awards + if (award.type === 'PERSONAL' && 'name' in award.winner) { + return { + ...baseAward, + winner: { + name: award.winner.name + } + }; + } + + return undefined; + }) + .filter((award): award is NonNullable => award !== undefined); return { displayState, awards, awardsAssigned }; },