diff --git a/src/containers/PersonalSchedule/Assignments.tsx b/src/containers/PersonalSchedule/Assignments.tsx index 63df975..2068e9b 100644 --- a/src/containers/PersonalSchedule/Assignments.tsx +++ b/src/containers/PersonalSchedule/Assignments.tsx @@ -4,12 +4,13 @@ import { useTranslation } from 'react-i18next'; import { useCollapse } from '@/hooks/UseCollapse'; import { useNow } from '@/hooks/useNow/useNow'; import { parseActivityCodeFlexible } from '@/lib/activityCodes'; +import { isOfficialEventId } from '@/lib/events'; import { isActivityWithRoomOrParent } from '@/lib/typeguards'; import { byDate, roundTime } from '@/lib/utils'; import { getRoomData, hasMultipleScheduleLocations } from '../../lib/activities'; import { ExtraAssignment } from './PersonalExtraAssignment'; import { PersonalNormalAssignment } from './PersonalNormalAssignment'; -import { getGroupedAssignmentsByDate } from './utils'; +import { formatBriefActivityName, getGroupedAssignmentsByDate } from './utils'; export interface AssignmentsProps { wcif: Competition; @@ -126,12 +127,17 @@ export function Assignments({ wcif, person, showStationNumber }: AssignmentsProp ? activity.parent?.room : undefined; if (assignment.type === 'extra') { + const parsed = parseActivityCodeFlexible(activity.activityCode); + const activityName = isOfficialEventId(parsed.eventId) + ? formatBriefActivityName(activity) + : undefined; return ( - - {formattedStartTime} - {formattedEndTime} - + {activityName ? ( + <> + {activityName} + {formattedStartTime} + + ) : ( + + {formattedStartTime} - {formattedEndTime} + + )} - {worldsAssignmentMap[assignment.assignmentCode] || assignment.assignmentCode} + {worldsAssignmentMap[assignment.assignmentCode] ? ( + worldsAssignmentMap[assignment.assignmentCode] + ) : ( + + )} {room ? ( diff --git a/src/containers/PersonalSchedule/utils.ts b/src/containers/PersonalSchedule/utils.ts index 4b2303e..c005759 100644 --- a/src/containers/PersonalSchedule/utils.ts +++ b/src/containers/PersonalSchedule/utils.ts @@ -17,13 +17,21 @@ export const getNormalAssignments = (wcif: Competition, person: Person) => { ...assignment, activity: allActivities.find(({ id }) => id === assignment.activityId), })) - .filter( - (assignment) => - !( - assignment.activity?.activityCode === 'other-multi' && - assignment.assignmentCode === 'competitor' - ), - ) + .filter((assignment) => { + if ( + assignment.activity?.activityCode === 'other-multi' && + assignment.assignmentCode === 'competitor' + ) { + return false; + } + if (assignment.assignmentCode === 'competitor') { + const parsed = parseActivityCodeFlexible(assignment.activity?.activityCode || ''); + if (parsed.eventId === '333fm' && parsed.attemptNumber !== null) { + return false; + } + } + return true; + }) .sort((a, b) => byDate(a.activity, b.activity)) : []; @@ -85,15 +93,45 @@ const getCubeSubmissionAssignments = (wcif: Competition, person: Person) => { ); }; +const getFmcAttemptAssignments = (wcif: Competition, person: Person) => { + const allActivities = getAllActivities(wcif); + + if (!person.registration?.eventIds.includes('333fm')) { + return []; + } + + const fmcAttemptActivities = allActivities.filter((activity) => { + const parsed = parseActivityCodeFlexible(activity.activityCode); + return parsed.eventId === '333fm' && parsed.attemptNumber !== null; + }); + + return fmcAttemptActivities.map( + ( + activity, + ): Assignment & { + type: 'extra'; + activity: Activity; + } => ({ + type: 'extra', + assignmentCode: 'competitor', + activityId: activity.id, + stationNumber: null, + activity, + }), + ); +}; + export const getAllAssignments = (wcif: Competition, person: Person) => { const normalAssignments = getNormalAssignments(wcif, person); const extraAssignments = getExtraAssignments(person); const mbldCubeSubmissionAssignments = getCubeSubmissionAssignments(wcif, person); + const fmcAttemptAssignments = getFmcAttemptAssignments(wcif, person); const allAssignments = [ ...normalAssignments, ...extraAssignments, ...mbldCubeSubmissionAssignments, + ...fmcAttemptAssignments, ].sort((a, b) => byDate(a.activity, b.activity)); return allAssignments;