Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,52 @@ export function AwardsPresentationWrapper() {

const mappedAwards = useMemo<PresentationAward[]>(() => {
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]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,26 +60,49 @@ 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 {
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
}
};
});
// Handle TEAM awards
if (award.type === 'TEAM' && 'team' in award.winner) {
const winner = award.winner as TeamWinner;

return {
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
}
};
}

// Handle PERSONAL awards
if (award.type === 'PERSONAL' && 'name' in award.winner) {
return {
id: award.id,
name: award.name,
index: award.index,
place: award.place,
type: award.type,
isOptional: award.isOptional,
winner: {
name: award.winner.name
}
};
}

return undefined;
})
.filter((award): award is NonNullable<typeof award> => award !== undefined);

return { displayState, awards, awardsAssigned };
},
Expand Down