+import Participant from './Participant';
import Round from './Round';
+export const compareScore = (a, b) => {
+ const a_score = a && a.score ? a.score : 0;
+ const b_score = b && b.score ? b.score : 0;
+ if (a_score < b_score) return -1;
+ if (b_score < a_score) return 1;
+ return Participant.compareUsername(a.participant, b.participant) * -1;
+};
+
export const findParticipant = (tournament, user) => {
if (!tournament || !tournament.participants || !tournament.participants.length) return null;
if (!user || !user.id) return null;
return tournament.participants.find(p => p.user_id == user.id);
};
+export const getRunners = tournament => {
+ if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+ return tournament.participants
+ .filter(Participant.isRunner)
+ .sort(Participant.compareUsername);
+};
+
+export const getTournamentAdmins = tournament => {
+ if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+ return tournament.participants
+ .filter(Participant.isTournamentAdmin)
+ .sort(Participant.compareUsername);
+};
+
+export const getTournamentCrew = tournament => {
+ if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+ return tournament.participants
+ .filter(Participant.isTournamentCrew)
+ .sort(Participant.compareUsername);
+};
+
+export const getTournamentMonitors = tournament => {
+ if (!tournament || !tournament.participants || !tournament.participants.length) return [];
+ return tournament.participants
+ .filter(Participant.isTournamentMonitor)
+ .sort(Participant.compareUsername);
+};
+
+export const hasRunners = tournament => {
+ return getRunners(tournament).length > 0;
+};
+
+export const hasTournamentAdmins = tournament => {
+ return getTournamentAdmins(tournament).length > 0;
+};
+
+export const hasTournamentCrew = tournament => {
+ return getTournamentCrew(tournament).length > 0;
+};
+
+export const hasTournamentMonitors = tournament => {
+ return getTournamentMonitors(tournament).length > 0;
+};
+
+export const patchParticipant = (tournament, participant) => {
+ if (!tournament) return tournament;
+ if (!tournament.participants || !tournament.participants.length) {
+ return {
+ ...tournament,
+ participants: [participant],
+ };
+ }
+ if (!tournament.participants.find(p => p.id === participant.id)) {
+ return {
+ ...tournament,
+ participants: [...tournament.participants, participant],
+ };
+ }
+ return {
+ ...tournament,
+ participants: tournament.participants.map(
+ p => p.id === participant.id ? participant : p,
+ ),
+ };
+};
+
export const patchResult = (tournament, result) => {
if (!tournament || !tournament.rounds) return tournament;
return {
};
};
+export const patchRound = (tournament, round) => {
+ if (!tournament) return tournament;
+ return {
+ ...tournament,
+ rounds: tournament.rounds.map(r => r.id === round.id ? { ...r, ...round } : r),
+ };
+};
+
+export const patchUser = (tournament, user) => {
+ if (!tournament || !tournament.participants || !user) return tournament;
+ if (!tournament.participants.find(p => p.user_id == user.id)) return tournament;
+ return {
+ ...tournament,
+ participants: tournament.participants.map(p => Participant.patchUser(p, user)),
+ };
+};
+
+export const sortParticipants = tournament => {
+ if (!tournament || !tournament.participants || !tournament.participants.length) {
+ return tournament;
+ }
+ return {
+ ...tournament,
+ participants: tournament.participants.sort(Participant.compareUsername),
+ };
+};
+
export default {
+ compareScore,
findParticipant,
+ getRunners,
+ getTournamentAdmins,
+ getTournamentCrew,
+ getTournamentMonitors,
+ hasRunners,
+ hasTournamentAdmins,
+ hasTournamentCrew,
+ hasTournamentMonitors,
patchResult,
+ patchRound,
+ patchUser,
+ sortParticipants,
};