export const compareResult = round => (a, b) => {
const a_result = findResult(a, round);
const b_result = findResult(b, round);
- const a_time = a_result ? a_result.time : 0;
- const b_time = b_result ? b_result.time : 0;
+ const a_time = a_result && !a_result.forfeit ? a_result.time : 0;
+ const b_time = b_result && !b_result.forfeit ? b_result.time : 0;
if (a_time) {
if (b_time) {
if (a_time < b_time) return -1;
if (b_time) {
return 1;
}
- return 0;
+ const a_forfeit = a_result && a_result.forfeit;
+ const b_forfeit = b_result && b_result.forfeit;
+ if (a_forfeit) {
+ if (b_forfeit) {
+ return 0;
+ }
+ return -1;
+ }
+ if (b_forfeit) {
+ return 1;
+ }
+ return compareUsername(a, b);
};
export const compareUsername = (a, b) => {
return round.results.find(result => result.user_id === participant.user_id);
};
+export const isRunner = participant =>
+ participant && participant.roles && participant.roles.includes('runner');
+
+export const isTournamentAdmin = participant =>
+ participant && participant.roles && participant.roles.includes('admin');
+
+export const patchUser = (participant, user) => {
+ if (!participant || !user) return participant;
+ if (participant.user_id != user.id) return participant;
+ return {
+ ...participant,
+ user: {
+ ...participant.user,
+ ...user,
+ },
+ };
+};
+
export const sortByResult = (participants, round) => {
if (!participants || !participants.length) return participants;
if (!round || !round.results || !round.results.length) return participants;
compareResult,
compareUsername,
findResult,
+ isRunner,
+ isTournamentAdmin,
+ patchUser,
sortByResult,
};