Skip to content

Commit ba71397

Browse files
committed
Fixed formatting of mbld results
1 parent 04dd2ea commit ba71397

3 files changed

Lines changed: 70 additions & 3 deletions

File tree

src/pages/Competition/Round/ConfigureAssignmentsDialog/PersonAssignmentRow.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { roundFormatById } from '../../../../lib/domain/events';
33
import { acceptedRegistration, isOrganizerOrDelegate } from '../../../../lib/domain/persons';
44
import TableAssignmentCell from '../TableAssignmentCell';
55
import StaffAssignmentsSummary from './StaffAssignmentsSummary';
6+
import { formatSeedResult } from './formatSeedResult';
67
import type { PersonWithSeedResult, Room } from './types';
78
import { EmojiPeople } from '@mui/icons-material';
89
import CheckIcon from '@mui/icons-material/Check';
910
import { Checkbox, TableCell, TableRow, Tooltip } from '@mui/material';
1011
import { grey, red, yellow } from '@mui/material/colors';
1112
import { makeStyles } from '@mui/styles';
1213
import type { EventId, Person, Round } from '@wca/helpers';
13-
import { formatCentiseconds } from '@wca/helpers';
1414
import clsx from 'clsx';
1515

1616
const useStyles = makeStyles(() => ({
@@ -64,8 +64,7 @@ const PersonAssignmentRow = ({
6464
const rankingResult =
6565
roundFormat === 'average' ? person.seedResult?.average : person.seedResult?.single;
6666

67-
const formattedRankingResult =
68-
rankingResult && !isNaN(rankingResult) && formatCentiseconds(rankingResult);
67+
const formattedRankingResult = formatSeedResult(eventId, roundFormat, rankingResult);
6968

7069
const totalStaffAssignments =
7170
person?.assignments
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { formatSeedResult } from './formatSeedResult';
2+
import { encodeMultiResult } from '@wca/helpers';
3+
import { describe, expect, it } from 'vitest';
4+
5+
describe('formatSeedResult', () => {
6+
it('formats multiblind results', () => {
7+
const result = encodeMultiResult({ solved: 10, attempted: 12, centiseconds: 6000 });
8+
9+
expect(formatSeedResult('333mbf', 'single', result)).toBe('10/12 1:00');
10+
});
11+
12+
it('formats multiblind DNF', () => {
13+
expect(formatSeedResult('333mbf', 'average', -1)).toBe('DNF');
14+
});
15+
16+
it('formats fewest moves based on ranking type', () => {
17+
expect(formatSeedResult('333fm', 'average', 334)).toBe('3.34');
18+
expect(formatSeedResult('333fm', 'single', 40)).toBe('40');
19+
});
20+
21+
it('formats standard events in centiseconds', () => {
22+
expect(formatSeedResult('333', 'average', 1234)).toBe('12.34');
23+
});
24+
25+
it('returns undefined for empty or invalid results', () => {
26+
expect(formatSeedResult('333', 'single', undefined)).toBe('-');
27+
expect(formatSeedResult('333', 'single', NaN as number)).toBe('-');
28+
});
29+
});
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import {
2+
type AttemptResult,
3+
decodeMultiResult,
4+
type EventId,
5+
formatCentiseconds,
6+
formatMultiResult,
7+
type RankingType,
8+
} from '@wca/helpers';
9+
10+
const isValidResult = (result: AttemptResult | null | undefined) =>
11+
result !== null && result !== undefined && !Number.isNaN(result as number);
12+
13+
const formatFewestMovesAverage = (result: AttemptResult) => ((result as number) / 100).toFixed(2);
14+
15+
export const formatSeedResult = (
16+
eventId: EventId,
17+
rankingType: RankingType,
18+
result?: AttemptResult
19+
) => {
20+
if (!result) {
21+
return '-';
22+
}
23+
24+
if (!isValidResult(result)) {
25+
return undefined;
26+
}
27+
28+
if (eventId === '333mbf') {
29+
return formatMultiResult(decodeMultiResult(result));
30+
}
31+
32+
if (eventId === '333fm') {
33+
return rankingType === 'average'
34+
? formatFewestMovesAverage(result)
35+
: (result as number).toString();
36+
}
37+
38+
return formatCentiseconds(result as number);
39+
};

0 commit comments

Comments
 (0)